-
什么是stream?
Stream流和传统的IO流虽然都叫做流,但是他们是两种完全不同的东西。
流可以简单的说是处理数据集合的东西,可以使用流式API来处理集合,而不是写一个逻辑来实现。
stream位于java.util.stream.Stream -
流的分类
2.1 顺序流
顺序流即每个指令按顺序执行。List<Integer> nums = Arrays.asList(1,2,3,4); nums.stream().forEach(n->System.out.println(n));
总是按顺序输出1234
2.2 并行流
集合中的操作并行执行。List<Integer> nums = Arrays.asList(1,2,3,4); nums.parallelStream().forEach(n->System.out.println(n));
不一定是按顺序输出1234,乱序的,每次结果不一定。
并行流使用了ForkJoinPool。 -
创建流
3.1 Stream.of() 可变参数Stream<String> stream1 = Stream.of("A","B","C"); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.2 Stream.of() 数组
String strings[] = new String[]{"A","B","C"}; Stream<String> stream1 = Stream.of(strings); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.3 Arrays.stream()
String strings[] = new String[]{"A","B","C"}; Stream<String> stream1 = Arrays.stream(strings); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.4 List
List<String> list = Arrays.asList("A","B","C"); Stream<String> stream1 = list.stream(); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.5 Set
Set<String> set = new HashSet<>(Arrays.asList("A","B","C")); Stream<String> stream1 = set.stream(); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.6 Map
Map<String,String> map = new HashMap<>(); map.put("A","A"); map.put("B","B"); map.put("C","C"); Stream<String> stream1 = map.values().stream(); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.7 Stream.iterate()
Stream<String> stream1 = Stream.iterate("A",e->String.valueOf((char) (e.charAt(0)+1))).limit(3); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.8 Pattern
String string = "A,B,C"; Stream<String> stream1 = Pattern.compile("\\W").splitAsStream(string); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.9 Files.lines()
Stream<String> stream1 = Files.lines(Paths.get("文件路径")); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
3.10 Stream.generate()
Stream<String> stream1 = Stream.generate(()->"A").limit(3); System.out.println("stream1:"+ stream1.collect(Collectors.joining()));
-
Stream中map和flatMap的区别
4.1 map
对流中的每个元素进行转换。例如 对List<String>集合每个元素后面都加上一个",";List<String>转List<Long>等。
List<String> strings = Arrays.asList("A","B","C");
List<String> mapList = strings.stream().map(e->e+",").collect(Collectors.toList());
mapList.forEach(System.out::println);
List<String> strings2 = Arrays.asList("11","12","13");
List<Long> longs = strings2.stream().map(Long::valueOf).collect(Collectors.toList());
longs.forEach(System.out::println);
4.2 flatMap
对流中每个元素进行平铺,形成多个流合在一起。
例如:合并三个字符串数组
普通情况:
String arr1[] = {"A","B","C"};
String arr2[] = {"D","E","F"};
String arr3[] = {"G","H","I"};
List<String[]> list = Stream.of(arr1,arr2,arr3).collect(Collectors.toList());
flatMap:
List<String> list2 = list.stream().flatMap(Arrays::stream).collect(Collectors.toList());
可以看出:flatMap把数组流中的元素全部合并到一个流中了。
网友评论