java1.8及之后的版本,对集合的操作用Java stream ,结合lamda表达式,更方便,简洁了,大大减少开发的代码量
现在说下一次stream处理分为三个阶段:
输入流:就是一个常用的集合,或者变量可以转化成流的方式进行处理
中间流:就是在流处理的过程,对流进行转换,生成一个新的流
终端流:即对流来进行消费,消费完了就结束了
1、对List的操作
加入对以下list进行处理:
List<Person> personList = new ArrayList<>(); personList.add(new Person("yang","cai")); personList.add(new Person("yang","fen")); personList.add(new Person("yang","feng"));
1、刷选/过滤(使用filter关键字)
personList.stream().filter(x->x.getLastName().equals("cai")).collect(Collectors.toList());
2、分组(使用collect,groupingBy关键字)
//简单分组 personList.stream().collect(Collectors.groupingBy(Person::getLastName)); //分组求count personList.stream().collect(Collectors.groupingBy(Person::getFirstName,Collectors.counting())); //分组求和,求平均,最大,最小值,求count personList.stream().collect(Collectors.groupingBy(Person::getFirstName,Collectors.summarizingInt(Person::getPersonId))) 打印结果为: {yang=IntSummaryStatistics{count=3, sum=6, min=1, average=2.000000, max=3}}
3、合并(使用flatMap关键字,这里要主要flatMap跟Map的区别)
//两个相同实体之间的合并 List<Person> personList = new ArrayList<>(); personList.add(new Person("yang","cai")); personList.add(new Person("yang","fen")); personList.add(new Person("yang","feng")); List<Person> personList1 = new ArrayList<>(); personList.add(new Person("wang","de")); personList.add(new Person("wang","qing")); personList.add(new Person("wang","er")); List<Person> list = Stream.of(personList,personList1).flatMap(Collection::stream).collect(Collectors.toList());//会把两个list的值合并
//两个不同实体之间的合并
List<Person> personList = new ArrayList<>(); personList.add(new Person(1,"yang","cai")); personList.add(new Person(2,"yang","fen")); personList.add(new Person(3,"yang","feng"));
List<Area> areaList = new ArrayList<>(); areaList.add(new Area(1,"广东","深圳")); areaList.add(new Area(2,"福建","南平")); areaList.add(new Area(3,"广东","广州"));
List<PersonArea> list = personList.stream().flatMap(x->areaList.stream() .filter(y->y.personId==x.personId) .map(z->new PersonArea(x.personId,x.firstName.concat(x.lastName),z.province.concat(z.city)))) .collect(Collectors.toList()); System.out.println(list);
打印结果为:
[PersonArea{personId=1, name='yangcai', addr='广东深圳'}, PersonArea{personId=2, name='yangfen', addr='福建南平'}, PersonArea{personId=3, name='yangfeng', addr='广东广州'}]
4、排序(使用sorted关键字)
personList.stream().sorted(Comparator.comparing(Person::getLastName)).collect(Collectors.toList());
5、取部分元素,重新生成新的list (使用map关键字)
personList.stream().map(Person::getLastName).collect(Collectors.toList());
6、遍历
personList.stream().forEach(System.out::println);
7、list 转 map
Map<Integer,String> listToMap = personList.stream().collect(Collectors.toMap(Person::getPersonId,Person::getLastName));
2、对Map的操作
Map<Person,Area> map = new HashMap<>(); map.put(new Person(1,"yang","cai"),(new Area(1,"广东","深圳"))); map.put(new Person(2,"yang","fen"),(new Area(2,"广东","广州"))); map.put(new Person(3,"yang","yao"),(new Area(3,"广东","东莞")));
1、过滤:(可以针对 map的key,value分别过滤)
map.entrySet().stream().filter(x->x.getKey().personId==1).collect(Collectors.toList());
2、遍历:用forEach关键字
map.forEach((k,v)->{ -------------------代码块---------------- });