java8--stream流API
阿新 • • 發佈:2018-11-19
生成資料流
使用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); } }