内容简介:<源码地址:
0x00. 前置数据
private List<People> peoples = null;
@BeforeEach void before () {
peoples = new ArrayList<>();
peoples.add(new People("K.O1", 21, new Date()));
peoples.add(new People("K.O2", 22, new Date()));
peoples.add(new People("K.O3", 23, new Date()));
peoples.add(new People("K.O4", 24, new Date()));
peoples.add(new People("K.O5", 25, new Date()));
peoples.add(new People("K.O6", 26, new Date()));
}
0x01. 提取对象中的一列
/**
* 提取1列
*/
@Test void whenExtractColumnSuccess () {
//第一种写法
List<Integer> ages1 = peoples.stream().map(people -> people.getAge()).collect(Collectors.toList());
System.out.println("###println: args1----");
ages1.forEach(System.out::println);
//简单一点的写法
List<Integer> ages2 = peoples.stream().map(People::getAge).collect(Collectors.toList());
System.out.println("###println: args2----");
ages1.forEach(System.out::println);
}
###println: args1----
21
22
23
24
25
26
###println: args2----
21
22
23
24
25
26
0x02. 通过字段中条件过滤集合列表
/**
* 只要年纪大于25岁的人
*/
@Test void whenFilterAgeGT25Success () {
List<People> peoples1 = peoples.stream().filter(x -> x.getAge() > 25).collect(Collectors.toList());
peoples1.forEach(x -> System.out.println(x.toString()));
}
People{name='K.O6', age=26, birthday=Wed May 15 22:20:22 CST 2019}
0x03. 列表中对象数值型列数据求和
/**
* 求和全部年纪
*/
@Test void sumAllPeopleAgeSuccess () {
Integer sum1 = peoples.stream().collect(Collectors.summingInt(People::getAge));
System.out.println("###sum1: " + sum1);
Integer sum2 = peoples.stream().mapToInt(People::getAge).sum();
System.out.println("###sum2: " + sum2);
}
###sum1: 141
###sum2: 141
0x04. 取出集合符合条件的第一个元素
/**
* 取出年纪为25岁的人
*/
@Test void extractAgeEQ25Success () {
Optional<People> optionalPeople = peoples.stream().filter(x -> x.getAge() == 25).findFirst();
if (optionalPeople.isPresent()) System.out.println("###name1: " + optionalPeople.get().getName());
//简写
peoples.stream().filter(x -> x.getAge() == 25).findFirst().ifPresent(x -> System.out.println("###name2: " + x.getName()));
}
###name1: K.O5
###name2: K.O5
0x05. 对集合中对象字符列按规则拼接
/**
* 逗号拼接全部名字
*/
@Test void printAllNameSuccess () {
String names = peoples.stream().map(People::getName).collect(Collectors.joining(","));
System.out.println(names);
}
K.O1,K.O2,K.O3,K.O4,K.O5,K.O6
0x06. 将集合元素提取,转为Map
/**
* 将集合转成(name, age) 的map
*/
@Test void list2MapSuccess () {
Map<String, Integer> map1 = peoples.stream().collect(Collectors.toMap(People::getName, People::getAge));
map1.forEach((k, v) -> System.out.println(k + ":" + v));
System.out.println("--------");
//(name object)
Map<String, People> map2 = peoples.stream().collect(Collectors.toMap(People::getName, People::getThis));
map2.forEach((k, v) -> System.out.println(k + ":" + v.toString()));
}
//People中自己实现的方法
public People getThis () {
return this;
}
K.O2:22
K.O3:23
K.O1:21
K.O6:26
K.O4:24
K.O5:25
--------
K.O2:People{name='K.O2', age=22, birthday=Wed May 15 22:42:39 CST 2019}
K.O3:People{name='K.O3', age=23, birthday=Wed May 15 22:42:39 CST 2019}
K.O1:People{name='K.O1', age=21, birthday=Wed May 15 22:42:39 CST 2019}
K.O6:People{name='K.O6', age=26, birthday=Wed May 15 22:42:39 CST 2019}
K.O4:People{name='K.O4', age=24, birthday=Wed May 15 22:42:39 CST 2019}
K.O5:People{name='K.O5', age=25, birthday=Wed May 15 22:42:39 CST 2019}
0x07. 按集合某一属性进行分组
/**
* 按名字分组
*/
@Test void listGroupByNameSuccess() {
//添加一个元素方便看效果
peoples.add(new People("K.O1", 29, new Date()));
Map<String, List<People>> map = peoples.stream().collect(Collectors.groupingBy(People::getName));
map.forEach((k, v) -> System.out.println(k + ":" + v.size()));
}
K.O2:1
K.O3:1
K.O1:2
K.O6:1
K.O4:1
K.O5:1
0x08. 求集合对象数值列平均数
/**
* 求人平均年龄
*/
@Test void averagingAgeSuccess () {
Double avgAge = peoples.stream().collect(Collectors.averagingInt(People::getAge));
System.out.println(avgAge);
}
23.5
0x09. 对集合按某一列排序
/**
* 按年龄排序
*/
@Test void sortByAgeSuccess () {
System.out.println("###排序前---");
peoples.forEach(x -> System.out.println(x.getAge()));
peoples.sort((x, y) -> {
if (x.getAge() > y.getAge()) {
return 1;
} else if (x.getAge() == y.getAge()) {
return 0;
}
return -1;
});
System.out.println("###排序后---");
peoples.forEach(x -> System.out.println(x.getAge()));
}
###排序前---
21
23
24
25
22
26
###排序后---
21
22
23
24
25
26
未完待续
<源码地址: https://github.com/cos2a/learning-repo/tree/master/core-java8 >
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++ Primer 中文版(第 4 版)
Stanley B.Lippman、Josée LaJoie、Barbara E.Moo / 李师贤、蒋爱军、梅晓勇、林瑛 / 人民邮电出版社 / 2006 / 99.00元
本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当......一起来看看 《C++ Primer 中文版(第 4 版)》 这本书的介绍吧!