1、过滤
//过滤出年龄大于30的用户 List<User> userList=null; List<User> reslutList=userList.stream().filter(user ->(user.getAge()>=30)).collect(Collectors.toList());
2、分组
List<User> userList=null; //根据用户性别分组 Map<Integer,List<User>> resultMap=userList.stream().collect(Collectors.groupingBy(user->user.getSex())); //根据性别分组,再根据年龄分组 Map<Integer/*性别*/, Map<Integer/*年龄*/, List<User>>> groupMap =userList.stream().collect(Collectors.groupingBy(t -> t.getSex(), Collectors.groupingBy(t -> t.getAge())));
3、排序
List<Integer> list=null; //升序 list.stream().sorted(); //降序 list.stream().sorted(Comparator.reverseOrder()); List<User> userList=null; //根据用户年龄升序 userList.stream().sorted(Comparator.comparing(User::getAge)); //根据用户年龄降序 userList.stream().sorted(Comparator.comparing(User::getAge).reverseOrder());
4、去重
List<User> userList=null; //方式一:根据ID去重 List<User> reslutList = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(o->o.getId()))),ArrayList::new)); //方式二:去重,需要注意的是要先重写对象User的equals和hashCode方法 List<User> reslutList = userList.stream().distinct().collect(Collectors.toList());
5、对象集合转换成单属性集合
List<User> userList=null; //获取用户ID集合 List<Integer> reslutList = userList.stream().map(t -> t.getId()).collect(Collectors.toList());
6、List拼接成字符串
List<String> nameList=null; String names = nameList.stream().collect(Collectors.joining(",")); List<User> userList=null; String names = userList.stream().map(User::getName).collect(Collectors.joining(","));
7、sum求和
List<String> nameList=null; //获取年龄总和 int count = userList.stream().mapToInt(t -> t.getAge()).sum();
8、List转数组
List<String> userNameList=null; //String集合转String数组 String[] arrStr = userNameList.stream().toArray(String[]::new);
9、List转Map
List<User> userList=null; //根据用户ID转换成Map【重复取第一个】 Map<String,TerminalEx> map=userList.stream().collect(Collectors.toMap(User::getId,o->o,(o1,o2)->o1));
10、集合交集、补集、并集、差集 操作【非java 8特性】
(1)依赖jar包:
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.2</version> </dependency>
(2)示例
public class Test { public static String[] attr1 = new String[]{"A", "B", "C", "D", "E", "F", null}; public static String[] attr2 = new String[]{"1", "2", "3", "D", "E", "F", null}; public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(Arrays.asList(attr1)); ArrayList<String> list2 = new ArrayList<>(Arrays.asList(attr2)); System.out.println("list1和list2的交集:" + CollectionUtil.intersection(list1, list2)); System.out.println("list1和list2的补集:" + CollectionUtil.disjunction(list1, list2)); System.out.println("list1和list2的并集:" + CollectionUtil.union(list1, list2)); System.out.println("参照list1,list2的差集:"+CollectionUtil.subtract(list1,list2)); System.out.println("参照list2,list1的差集:"+CollectionUtil.subtract(list2,list1)); } } //输出如下: list1和list2的交集:[null, D, E, F] list1和list2的补集:[1, A, 2, B, 3, C] list1和list2的并集:[null, 1, A, 2, B, 3, C, D, E, F] 参照list1,list2的差集:[A, B, C] 参照list2,list1的差集:[1, 2, 3]