java lambda例子

来源:互联网 发布:centos 网络流量监控 编辑:程序博客网 时间:2024/06/04 17:47
List<Person> list=new LinkedList<>();Person p1=new Person("zhangsan", 1);Person p2=new Person("lisi",3);Person p3=new Person("wangwu",2);Person p4=new Person("wangwu",4);list.add(p1);list.add(p2);list.add(p3);list.add(p4);//用新的stream通过转化后代替旧的  zhangsan,lisi,wangwu,wangwu,list.stream().flatMap(o->Stream.of(o.getName()+",")).forEach(System.out::print);System.out.println();//过滤Id>1的转成list [Person [name=lisi, id=3, addr=null], Person [name=wangwu, id=2, addr=null], Person [name=wangwu, id=4, addr=null]]List<Person> l=list.stream().filter(o->o.getId()>1).collect(Collectors.toList());System.out.println(l);//提取 name 字段转list [zhangsan, lisi, wangwu, wangwu]List<String> l1=list.stream().map(o->o.getName()).collect(Collectors.toList());System.out.println(l1);//提取id字段 算总和  9int sum = list.stream().filter(o->o.getId()>1).mapToInt(o->o.getId()).sum();System.out.println(sum);//提取id和那么转map  {1=zhangsan, 2=wangwu, 3=lisi, 4=wangwu}Map<Integer, String> collect = list.stream().collect(Collectors.toMap(o->o.getId(), o->o.getName()));System.out.println(collect);//提取name字段转TreeSet  [lisi, wangwu, zhangsan]TreeSet<String> collect3 = list.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));System.out.println(collect3);//按name分组  {lisi=[Person [name=lisi, id=3, addr=null]], zhangsan=[Person [name=zhangsan, id=1, addr=null]], wangwu=[Person [name=wangwu, id=2, addr=null], Person [name=wangwu, id=4, addr=null]]}Map<String, List<Person>> collect2 = list.stream().collect(Collectors.groupingBy(Person::getName));System.out.println(collect2);//按 , 号拼接name字段  zhangsan,lisi,wangwu,wangwuString collect4 = list.stream().map(Person::getName).collect(Collectors.joining(","));System.out.println(collect4);//按 , 号 ,()为头尾, 拼接name字段  (zhangsan,lisi,wangwu,wangwu)String collect5 = list.parallelStream().map(Person::getName).collect(Collectors.joining(",","(",")"));System.out.println(collect5);//按name分组,算id总和  {lisi=3, zhangsan=1, wangwu=6}Map<String, Integer> collect7 = list.stream().collect(Collectors.groupingBy(Person::getName,Collectors.summingInt(Person::getId)));System.out.println(collect7);//按id>1 分成key为true和false的两个map  {false=[Person [name=zhangsan, id=1, addr=null]], true=[Person [name=lisi, id=3, addr=null], Person [name=wangwu, id=2, addr=null], Person [name=wangwu, id=4, addr=null]]}Map<Boolean, List<Person>> collect8 = list.stream().collect(Collectors.partitioningBy(person -> person.getId()>1));System.out.println(collect8);//按name字段,算每个那么字段的个数   {lisi=1, zhangsan=1, wangwu=2}Map<String, Long> collect10 = list.stream().collect(Collectors.groupingByConcurrent(Person::getName,Collectors.counting()));System.out.println(collect10);//按id字段 作为比较   Person [name=zhangsan, id=1, addr=null]Person [name=wangwu, id=2, addr=null]Person [name=lisi, id=3, addr=null]Person [name=wangwu, id=4, addr=null]list.sort(Comparator.comparing(p->p.getId()));list.stream().forEach(System.out::print);System.out.println();//按id比较的另一种写法  Person [name=zhangsan, id=1, addr=null]Person [name=wangwu, id=2, addr=null]Person [name=lisi, id=3, addr=null]Person [name=wangwu, id=4, addr=null]list.sort((o1,o2)->o1.getId()-o2.getId());list.forEach(System.out::print);System.out.println();//按name比较,相等时使用id字段,反序排列  Person [name=lisi, id=3, addr=null]Person [name=wangwu, id=2, addr=null]Person [name=wangwu, id=4, addr=null]Person [name=zhangsan, id=1, addr=null]list.sort(Comparator.comparing(p->((Person) p).getName()).thenComparing(p->((Person) p).getId()).reversed());list.stream().forEach(System.out::print);System.out.println();//按自定义实现了Comparator接口的比较器排序list.sort(Comparator.comparing(p->p.getName(),new StringComparator()));list.forEach(System.out::print);

0 0