@Test
public void demo1(){
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++){
list.add(i);
}
/**
* map
* collector
* filter
* stream
*/
//stream顺序处理,底层用来fork/Join框架
System.out.println("stream顺序处理");
Stream<Integer> stream = list.stream();
long s = System.currentTimeMillis();
// stream.forEach(elem -> System.out.println(elem));
// System.out.println(stream);
long e = System.currentTimeMillis();
long spendTime = (e - s)/1000;
//并行流式处理
System.out.println("并行流式处理");
long ps = System.currentTimeMillis();
Stream<Integer> integerStream = list.parallelStream();
System.out.println("总结:");
// integerStream.forEach(elem -> System.out.println(elem));
long pe = System.currentTimeMillis();
long spendTime2 = (pe - ps)/1000;
System.out.println(spendTime + " s" + "\t" + spendTime2 + "s");
/**
* map功能:
* 1.从原始的list中取值后,通过stream返回一个新的集合
*/
List<String> streamListMap = list.stream().map(n -> String.valueOf(n * 2)).collect(Collectors.toList());
System.out.println("map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素");
System.out.println(streamListMap);
/**
* collector收集器:
* 将流中的元素放入到一个List集合当中
*/
System.out.println("将流中的元素放入到一个List集合当中");
List<String> collectList = streamListMap.stream().collect(Collectors.toList());
System.out.println(collectList);
//filter
//过滤奇数
List<Integer> collectFilter = list.stream().filter(elem -> {
return elem % 2 == 0;
}).collect(Collectors.toList());
System.out.println(collectFilter);
List<Integer> collectFilter2 = list.stream().filter(elem -> elem % 2 == 0).collect(Collectors.toList());
System.out.println(collectFilter2);
//stram map filter collector
//distinct去重
ArrayList<Integer> intList = new ArrayList<Integer>(){
{
add(1);
add(1);
add(2);
}
};
System.out.println("distinct去重");
Stream<Integer> distinct = list.stream().distinct();
System.out.println(distinct.collect(Collectors.toList()));
//sort排序
ArrayList<People> peopleObjects = new ArrayList<People>(){
{
add(new People("wangwu", 30));
add(new People("zhangsan", 10));
add(new People("lisi", 20));
}
};
System.out.println("sort排序");
//正序
System.out.println("正序排序");
Stream<People> sortedList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge));
System.out.println(sortedList.collect(Collectors.toList()));
//倒序
System.out.println("降序");
Stream<People> reversedSortList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge).reversed());
System.out.println(reversedSortList.collect(Collectors.toList()));
//peek 对对象的进行操作
System.out.println("peek 对对象的进行操作");
Stream<People> peekStream = peopleObjects.stream().peek(elem -> elem.setAge(elem.getAge() * 2));
System.out.println(peekStream.collect(Collectors.toList()));
//截断limit
System.out.println("limit取出前三个");
Stream<Integer> limitStream = list.stream().limit(3);
System.out.println(limitStream.collect(Collectors.toList()));
//跳过skip
System.out.println("skip跳过前五个");
Stream<Integer> skipStream = list.stream().skip(5);
System.out.println(skipStream.collect(Collectors.toList()));
}
class People{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public People(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "PeekObject{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
控制台打印:
stream顺序处理
并行流式处理
总结:
0 s 0s
map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
将流中的元素放入到一个List集合当中
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
distinct去重
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort排序
正序排序
[PeekObject{name='zhangsan', age=10}, PeekObject{name='lisi', age=20}, PeekObject{name='wangwu', age=30}]
降序
[PeekObject{name='wangwu', age=30}, PeekObject{name='lisi', age=20}, PeekObject{name='zhangsan', age=10}]
peek 对对象的进行操作
[PeekObject{name='wangwu', age=60}, PeekObject{name='zhangsan', age=20}, PeekObject{name='lisi', age=40}]
limit取出前三个
[0, 1, 2]
skip跳过前五个
[5, 6, 7, 8, 9]