一.功能
1、 跟据某个属性分组OfficeId:
Map<String, List<IncomeSumPojo>> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId));
2、根据某个属性分组OfficeId,汇总某个属性Money:
Map<String, Double> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId,Collectors.summingDouble(IncomeSumPojo::getMoney)));
3、根据某个属性添加条件过滤数据:
list = list.stream().filter(u -> !u.getAmount().equals("0.00")).collect(Collectors.toList());
4、判断一组对象里面有没有属性值是某个值:
List<Menu> menuList = UserUtils.getMenuList();
boolean add = menuList.stream().anyMatch(m -> "plan:ctPlan:add".equals(m.getPermission()));
5、取出一组对象的某个属性组成一个新集合:
List<String> tableNames=list.stream().map(User::getMessage).collect(Collectors.toList());
6、list去重复:
list = list.stream().distinct().collect(Collectors.toList());
二.例子
先准备一点数据:
public class User { private Integer id; private String type; private String name; private String date; // omit setter and getter } User user1 = new User(1,"张三","小学", "2017-03"); User user2 = new User(2,"李四","小学", "2017-03"); User user3 = new User(3,"王五","初中", "2017-02"); User user4 = new User(4,"马六","高中", "2017-04"); User user5= new User(5,"jack","大学", "2017-04"); List<User > list = new ArrayList<>(); list.add(user1 ); list.add(user2 ); list.add(user3 ); list.add(user4 ); list.add(user5);
现在想对用户列表根据日期进行分组,得到一个map: date -> List<User>。
Java7以前也许是这样的:
List<User> userList = Arrays.asList(user1, user2, user3, user5, user4); Map<String, List<User>> groupUserMap = Maps.newHashMap(); for (User user : userList) { String month = user.getDate(); if (groupUserMap.containsKey(month)) { groupUserMap.get(month).add(user); } else { groupUserMap.put(month, Lists.newArrayList(user)); } }
有了Java8之后,一切很简单了:
Map<String, List<User>> groupUserMapOne =userList.stream().collect(Collectors.groupingBy(User::getDate));
如果想分组的List里是User的name呢:
Map<String, List<String>> userByDate = Stream.of(user1, user2, user3, user5, user4).collect(Collectors.groupingBy(User::getDate,
Collectors.mapping(User::getName, Collectors.toList())));
System.out.println(userByDate);