Java8 Stream API 常用方法
以下面的 User 类和 userList 为例:
1 | public class User { |
注意:使用Stream API,要求 List 不为 null,但可以为空
以下面代码为例,若 userList 为空,则出来的 userIdList 也为空,但不为 null。
1 | if (userList != null){ |
取一个属性组成List或Set
从userList中取userId组成List或Set:
1 | List<Integer> userIdList = userList.stream().map(User::getUserId).collect(Collectors.toList()); |
若要得到 Set,最后换成Collectors.toSet()。
取两个属性组成Map
从userList中取userId和userName组成Map:
1 | Map<Integer, String> userIdNameMap = userList.stream().collect(Collectors.toMap(User::getUserId, User::getUserName)); |
按一个属性分组,组成 key=属性,value=该属性下的list的Map
从userList中按address分组,组成 key=address,value=该address下的UserList的Map:
1 | Map<String, List<User>> addrMap = userList.stream().collect(Collectors.groupingBy(User::getAddress)); |
按一个属性分组,组成 key=属性,value=另一个属性list的Map
从userList中按address分组,组成 key=address,value=userIdList的Map:
1 | Map<String, List<Integer>> addrMap = userList.stream().collect( |
按多个属性分组
从userList中按address和age分组,组成 key=address,value=该address下的UserList的Map,将 address 和 age 属性拼接成一个字符串,以这个字符串做分组:
1 | Map<String, List<User>> map = userList.stream().collect(Collectors.groupingBy(user -> user.getAddress() + "_" + user.getAge())); |
按照属性值查找一个元素
从userList中查找age=20的第一个人/某个人:
1 | // 第一个 |
按照属性值查找所有元素
从userList中查找age=20的所有user列表:
1 | List<User> userList1 = userList.stream().filter(user -> user.getAge() == 20).collect(Collectors.toList()); |