stream流
Stream流引入
Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库。
测试的实体实例
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("马六");
List<User> listUser = new ArrayList<>();
listUser.add(new User().setId(1).setName("张三"));
listUser.add(new User().setId(2).setName("李四"));
listUser.add(new User().setId(3).setName("王五"));
listUser.add(new User().setId(3).setName("马六"));
1. 这种是将List集合转换为Map类型 以List种的值 做key与value:
Map<String, String> listMap = list.stream().collect(Collectors.toMap(x -> x, x -> x));
2. 这样是以实体中的id做map的key 以name作为key:
Map<Integer, User> listUserMap = listUser.stream().collect(Collectors.toMap(User::getId,User::getName));
3. 可以在map的key重复时进行调整 是使用oldValue还是newValue:
Map<Integer, User> listUserMap = listUser.stream().collect(Collectors.toMap(User::getId,User::getName,(oldValue, newValue) -> newValue)));
4. 也可以在在key重复的时候使用ArrayList<>将value打包为一个集合
Map<Integer,ArrayList<String>> listUserMap = listUser.stream().filter(x -> "1".equals(x.getUsername())).collect(Collectors.toMap(User::getId,
Lists.newArrayList(User::getName),(oldValue, newValue) -> {
oldValue.addAll(newValue);
return oldValue;
})));
5. 也可以在转换为map类型前进行进行过滤操作:
Map<Integer, User> listUserMap = listUser.stream().filter(x -> "1".equals(x.getUsername())).collect(Collectors.toMap(User::getId,User::getName,(oldValue, newValue) -> newValue)));
6. toMap也可以转换的过程中对value的值进行一系列的操作:
//lists可以为任何类型的数据进行返回
Map<String, List<TaskList>> listUserMap = list.stream().collect(Collectors.toMap(UserDTO::getUsername, x -> {
List<TaskList> lists = new ArrayList<>();
return lists;
}));