版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jasnet_u/article/details/83475048
生成数据流
使用Java8,Collection 接口有两个方法来生成流。
-
stream() -返回顺序流考虑集合作为其源。
-
parallelStream() - 返回并行数据流考虑集合作为其源
流/Stream是在JAVA8中引入的一个抽象,可以处理类似SQL语句声明数据
示例代码1: StreamTest.java
package com.tingcream.java8.stream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* rt.jar java.util.stream 包
* @author jelly
*
*/
public class StreamTest {
public static void main(String[] args) {
System.out.println("集合中去除空元素");
List<String> ss = Arrays.asList("abc", "", "bc", "efg", "abcd","", null,"jkl");
//List<String> list2= list.stream().filter(s-> !s.isEmpty()).collect(Collectors.toList());
List<String> ss2= ss.parallelStream().filter(s-> s!=null&&!s.isEmpty() ).collect(Collectors.toList());
System.out.println(ss);//原list没有改变
System.out.println(ss2);
System.out.println("==================");
/*
* stream() 返回一个流
* parallelStream() 返回一个并行流
* filter() 截取子集
* map() 将整个map中所有元素进行映射
* collect(Collectors.toList()); 最终返回一个list
* distinct() 去重
* sorted() 指定排序规则
* limit() 排序后取几条数据
* max().get() 取最大值
* min().get() 取最小值
* count() 取元素数量
*
* forEach() 对集合中元素进行遍历处理,无返回值
*
* collect(Collectors.toList())
* collect(Collectors.toSet())
* collect(Collectors.toSet())
* collect(Collectors.toCollection())
* collect(Collectors.toMap())
* collect(Collectors.toMap())
* collect(Collectors.joining(", "))
*
*/
List<Integer> nums = Arrays.asList(3, 2, 2, 3, 7, 3, 5, 4);
//get list of unique squares
List<Integer> nums2 = nums.parallelStream().map( a-> a*a).distinct().collect(Collectors.toList());
List<Integer> nums3 = nums.parallelStream().map( a-> (a-2)*2).distinct().collect(Collectors.toList());
List<Integer> nums4 = nums.parallelStream().map( a-> (a-2)*2).distinct().sorted().limit(2).collect(Collectors.toList());
List<Integer> nums5 = nums.parallelStream().map( a-> (a-2)*2).distinct().sorted((a,b)->b-a).limit(2).collect(Collectors.toList());
Integer max= nums.parallelStream().map( a-> (a-2)*2).max((a,b)->a-b).get();//获取最大值 10
Integer min= nums.parallelStream().map( a-> (a-2)*2).min((a,b)->a-b).get();//获取最小值 0
long count = nums.parallelStream().map( a-> (a-2)*2).distinct().count();//获取集合元素数量 5
System.out.println(nums2);
System.out.println(nums3);
System.out.println(nums4);
System.out.println(nums5);
System.out.println(max);
System.out.println(min);
System.out.println(count);
// nums.stream().map( a-> (a-2)*2).forEach(System.out::println);
nums.stream().map( a-> (a-2)*2).forEach(a->System.out.print(a+","));
System.out.println();
//collect 收集器
String mergedString = ss.parallelStream().filter(s-> s!=null&&!s.isEmpty()).collect(Collectors.joining(", "));
System.out.println("Merged String: " + mergedString);
}
}
示例代码2: StreamTest2.java
package com.tingcream.java8.stream;
import java.util.Arrays;
import java.util.List;
public class StreamTest2 {
public static void main(String[] args) {
List<Double> numbers = Arrays.asList(3d, 2d, 2d, 3d, 7d, 3d, 5d,4d,10d);
/* DoubleSummaryStatistics stats = numbers.stream().mapToDouble(a->a).summaryStatistics();
double avg = stats.getAverage();//平均值
double max= stats.getMax(); //最大值
double min= stats.getMin();//最小值
double sum = stats.getSum();//总和
long count = stats.getCount();//数量
System.out.println("avg: "+avg);
System.out.println("max: "+max);
System.out.println("min: "+min);
System.out.println("sum: "+sum);
System.out.println("count: "+count);*/
/*boolean b= numbers.parallelStream().anyMatch(a-> a>5);// 任何一个元素匹配了,则立即返回true
boolean b2= numbers.parallelStream().allMatch(a-> a>5);// 所有元素都匹配了,则返回true
boolean b3= numbers.parallelStream().noneMatch(a-> a>5);// 所有元素都不匹配,则返回true
System.out.println(b);
System.out.println(b2);//false
System.out.println(b3);//false
*/
double sum= numbers.parallelStream().mapToDouble(a->a).sum();
double avg= numbers.parallelStream().mapToDouble(a->a).average().getAsDouble();
long count =numbers.parallelStream().mapToDouble(a->a).distinct().count();
double max=numbers.parallelStream().mapToDouble(a->a).max().getAsDouble();
double min=numbers.parallelStream().mapToDouble(a->a).min().getAsDouble();
System.out.println("avg: "+avg);
System.out.println("max: "+max);
System.out.println("min: "+min);
System.out.println("sum: "+sum);
System.out.println("count: "+count);
}
}