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]
本文详细介绍了Java 8 Stream API的各种实用操作,包括过滤、分组、排序、去重、转换、求和、拼接、转数组、转Map等高级功能,以及集合的交集、补集、并集和差集操作,为开发者提供了全面的Stream API使用教程。
781





