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字段 算总和 9
int 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,wangwu
String 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);
java lambda例子
最新推荐文章于 2022-12-31 12:48:02 发布