Java 8 stream 流操作集合的一些简单用法:
List<User> userList = userService.getUserList();
一. 将装有User对象的List集合转为一个Map集合,key 为 id,值为对象本身;当然,key和值由你的需求来定;e指代当前User对象;
Map<String, User> collect = userList.stream().collect(Collectors.toMap(User::getId, e -> e));
Map<String, String> collect1 = userList.stream().collect(Collectors.toMap(User::getId, e -> e.getName()));
如果k值相同,用后面的覆盖前面的
Map<String, String> collect1 = userList.stream().collect(Collectors.toMap(User::getId, e -> e.getName(),(a,b) ->b));
二. 将集合中的对象按照对象的属性分组成一个Map集合,这里按照User的id来分组
Map<String, List<User>> stringListMap = userList.stream().collect(Collectors.groupingBy(User::getId));
三. 获取集合中所有对象的某个属性值转为一个集合并去重,这里以id为例
List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
四.针对对象的熟悉,过滤求和
Integer collect = list.stream().filter(e->e.getScore() != null).collect(Collectors.summingInt(User::getScore));
List<String> collect1 = list.stream().filter(e->e.getName() != null).map(User::getName).collect(Collectors.toList());
五.规约,字符串拼接
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User user = new User();
user.setId("1");
user.setName("李白");
user.setScore(null);
userList.add(user);
User user1 = new User();
user1.setId("2");
user1.setName("李慕白");
user1.setScore(20);
userList.add(user1);
User user2 = new User();
user2.setId("3");
user2.setName("老王");
user2.setScore(30);
userList.add(user2);
List<String> ids = Arrays.asList("1","3");
// 过滤需要的属性对象
List<User> collect = userList.stream().filter(e -> null != e.getId()).filter(e -> ids.contains(e.getId())).collect(Collectors.toList());
int size = collect.size();
System.out.println(size);
System.out.println("****************************************");
Integer reduce = userList.stream().filter(e -> null != e.getScore()).map(User::getScore).reduce(0, Integer::sum);
System.out.println(reduce);
System.out.println("****************************************");
String names = userList.stream().filter(e -> null != e.getName()).map(User::getName).collect(joining(","));
System.out.println(names);
}
六.根据集合中对象的某个属性去重集合
userList = userList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysUser::getRealName))), ArrayList::new)
);