Java8提供Stream常見操作
阿新 • • 發佈:2018-11-14
Java Stream是1.8提供的一種流式處理集合的工具。Collection介面提供了 stream方法能夠抽象成流,這樣省去了迭代的很多寫法,其用法靈活,下面列舉了一些常用的操作。
List<String> stringList = Lists.newArrayList(); for (int i = 0; i < 10; i++) { stringList.add(String.valueOf(i)); } stringList.stream().skip(2).collect(Collectors.toList()); // 不改變原物件 System.out.println(stringList); // Stream 使用介面 /** * 1. filter * 返回Predicate定義過濾的元素 */ // 過濾偶數 stringList = stringList.stream().filter(e -> Integer.valueOf(e) % 2 == 0).collect(Collectors.toList()); System.out.println(stringList); // [0, 2, 4, 6, 8] /** * 2.map * 定義函式返回新的型別的流 */ List<Long> longList = stringList.stream().map(Long::valueOf).collect(Collectors.toList()); System.out.println(longList);// [0, 2, 4, 6, 8] /** * 3.mapToInt * 轉換成Int型別的流, 可以做一些運算操作,其他double與float類似 */ // 求和 Integer count = stringList.stream().mapToInt(e -> Integer.valueOf(e)).sum(); System.out.println(count); /** * 4.flapMap * 二維陣列,每個陣列呼叫Function */ List<List<String>> stringListList = Lists.newArrayList(); for (int i = 0; i < 10; i ++) { List<String> list = Lists.newArrayList(); stringListList.add(list); for (int j = 0;j < 10;j ++) { list.add(String.valueOf(i * j)); } } List<Integer> integerListList = stringListList.stream().flatMap(e -> e.stream().map(Integer::valueOf)).collect(Collectors.toList()); System.out.println(integerListList); /** * 5.Distinct排除重複 */ List<Integer> distinctList = integerListList.stream().distinct().collect(Collectors.toList()); System.out.println(distinctList); // 去除重複的 /** * sort按指定方式排序 */ distinctList.sort((e1, e2) -> e1 < e2 ? 1 : -1); System.out.println(distinctList); // 遞減排列 /** * peek 可以使用它去處理每個元素 * 想比較map沒返回值 */ Stream.of("a", "b", "c").peek(e -> System.out.println(e)).collect(Collectors.toList()); /** * limit 只取前指定個數 */ List<Integer> limitList = Stream.of(1,2,3).limit(1).collect(Collectors.toList()); System.out.println(limitList); // 2,3 /** * skip 指定個數,返回 */ List<String> skipList = Stream.of("a", "b", "c").skip(1).collect(Collectors.toList()); System.out.println(skipList); // b,c