以一种声明的方式处理数据。让程序员写出高效率、干净、简洁的代码。将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
1.1 生成串行流
list.stream()
2.1 生成并行流
list.parallelStream()
迭代流中的每个数据
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < 5; i++) {
tempList.add(i);
}
}
System.out.println("========forEach=======");
tempList.stream().limit(10).forEach(System.out::println);
输出
========forEach=======
0
1
2
3
4
映射每个元素到对应的结果
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < 5; i++) {
tempList.add(i);
}
}
System.out.println("========map=======");
tempList.stream().map(x->"第"+x+"个元素").forEach(System.out::println);
输出
========map=======
第0个元素
第1个元素
第2个元素
第3个元素
第4个元素
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < 5; i++) {
tempList.add(i);
}
}
System.out.println("========filter=======");
tempList.stream().filter(integer -> integer<3).forEach(System.out::println);
输出
========filter=======
0
1
2
获取指定数量的流
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < 5; i++) {
tempList.add(i);
}
}
System.out.println("========limit=======");
tempList.stream().limit(3).forEach(System.out::println);
输出
========limit=======
0
1
2
static Random random=new Random();
static int max=5;
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < max; i++) {
tempList.add(random.nextInt(10));
}
}
System.out.println("========sorted=======");
tempList.stream().sorted((x,y)->x-y).forEach(System.out::println);
输出
========sorted=======
1
1
3
5
8
归约操作,将流转换成集合和聚合元素。Collectors 可用于返回列表、字符串、map等等
static Random random=new Random();
static int max=5;
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < max; i++) {
tempList.add(random.nextInt(10));
}
}
System.out.println("========Collectors.toList=======");
List<Integer> filtered = tempList.stream().filter(integer -> integer<5).collect(Collectors.toList());
System.out.println(filtered);
System.out.println("========Collectors.joining=======");
String mergedString = tempList.stream().map(integer -> String.valueOf(integer)).collect(Collectors.joining(","));
System.out.println(mergedString);
System.out.println("========Collectors.toMap=======");
Map<String,String> map = tempList.stream().collect(Collectors.toMap(integer->String.valueOf(integer),integer->"第"+integer+"个元素",(oldVal, currVal) -> oldVal));
System.out.println(JSON.toJSONString(map));
输出
========Collectors.toList=======
[3, 1]
========Collectors.joining=======
3,5,6,1,7
========Collectors.toMap=======
{"1":"第1个元素","3":"第3个元素","5":"第5个元素","6":"第6个元素","7":"第7个元素"}
产生统计结果的收集器。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果
static Random random=new Random();
static int max=5;
static List<Integer> tempList =new ArrayList<>();
static {
for (int i = 0; i < max; i++) {
tempList.add(random.nextInt(10));
}
}
System.out.println("========statistics=======");
IntSummaryStatistics stats = tempList.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("max=" + stats.getMax());
System.out.println("min=" + stats.getMin());
System.out.println("sum=" + stats.getSum());
System.out.println("avg=" + stats.getAverage());
输出
========statistics=======
max=9
min=1
sum=26
avg=5.2