定义
将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
生成流
在 Java 8 中, 集合接口有两个方法来生成流:
- stream() − 为集合创建串行流。
- parallelStream() − 为集合创建并行流。
函数式编程
与匿名类不同
import java.util.Arrays;import java.util.IntSummaryStatistics;import java.util.List;import java.util.Random;import java.util.stream.Collectors;public class StreamTest {public static void main(String[] args) {System.out.println("Use Java8:");List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");System.out.println("List: "+ strings);long count=strings.stream().filter(string->string.isEmpty()).count();System.out.println("Count of empty string: " + count);count = strings.stream().filter(string->string.length()==3).count();System.out.println("Count of string with length 3: " + count);List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());System.out.println("After filter: " + filtered);String mergedString = strings.stream().filter(string->!string.isEmpty()).collect(Collectors.joining(", "));System.out.println("After merged: " + mergedString);List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);List<Integer> squaresList = numbers.stream().map(i ->i*i).distinct().collect(Collectors.toList());System.out.println("Squares List: "+ squaresList);List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);System.out.println("List:" + integers);IntSummaryStatistics stats = integers.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("Average: " + stats.getAverage());System.out.println("Random:");Random random = new Random();random.ints(0,100).limit(10).sorted().forEach(System.out::println);count = strings.parallelStream().filter(string->string.isEmpty()).count();System.out.println("Count of empty string: " + count);}}
