Java8新特性—Stream舉例
阿新 • • 發佈:2018-12-09
說明:分別用常規程式碼和Lambda舉例
計算集合空字串數量
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl"); //1. 常規程式碼 long count = 0; for (String string : strings) { if (string.isEmpty()) { count++; } } //2. Stream count = strings.stream().filter(new Predicate<String>() { @Override public
計算集合字串長度為
3
的數量List<String> strings = Arrays.asList("abc"
刪除集合中的空字串
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl"); //1. 常規程式碼 List<String> filtered = new ArrayList<String>(); for (String string : strings) { if (!string.isEmpty()) { filtered.add(string); } } //2. Stream filtered = strings.stream().filter(new Predicate<String>() { @Override public boolean test(String s) { return !s.isEmpty(); } }).collect(Collectors.toList()); //3. Lambda表示式 filtered = strings.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList()); System.out.println("刪除空字串後的列表: " + filtered);//[abc, bc, efg, abcd, jkl]
刪除集合中空字串並使用逗號把它們合併起來
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl"); //1. 常規程式碼 StringBuilder sb = new StringBuilder(); for (String string : strings) { if (!string.isEmpty()) { sb.append(string); sb.append(", "); } } String mergedString = sb.substring(0, sb.length() - 2); //2. Stream mergedString = strings.stream().filter(new Predicate<String>() { @Override public boolean test(String s) { return !s.isEmpty(); } }).collect(Collectors.joining(", ")); //3. Lambda表示式 mergedString = strings.stream().filter(s -> !s.isEmpty()).collect(Collectors.joining(", ")); System.out.println("合併的字串: " + mergedString);//abc, bc, efg, abcd, jkl
獲取集合元素的平方並去重
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //1. 常規程式碼 List<Integer> squaresList = new ArrayList<Integer>(); for (Integer number : numbers) { Integer square = number * number; if (!squaresList.contains(square)) { squaresList.add(square); } } //2. Stream squaresList = numbers.stream().map(new Function<Integer, Integer>() { @Override public Integer apply(Integer i) { return i * i; } }).distinct().collect(Collectors.toList()); //3. Lambda表示式 squaresList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList()); System.out.println("平方數去重列表: " + squaresList);//[9, 4, 49, 25]
求最大最小平均總和等
List<Integer> integers = Arrays.asList(1, 2, 13, 4, 15, 6, 17, 8, 19); IntSummaryStatistics stats = integers.stream().mapToInt(new ToIntFunction<Integer>() { @Override public int applyAsInt(Integer i) { return i; } }).summaryStatistics(); stats = integers.stream().mapToInt(i -> i).summaryStatistics(); System.out.println("集合中最大的數 : " + stats.getMax());//19 System.out.println("集合中最小的數 : " + stats.getMin());//1 System.out.println("集合所有數之和 : " + stats.getSum());//85 System.out.println("集合中的平均數 : " + stats.getAverage());//9.444444444444445
輸出100以內(不包括100)的10個隨機數
//1. 常規程式碼 Random random = new Random(); for (int i = 0; i < 10; i++) { System.out.println(random.nextInt(100)); } //2. IntStream random.ints(0,100).limit(10).sorted().forEach(new IntConsumer() { @Override public void accept(int i) { System.out.println(i); } }); //3. Lambda表示式 random.ints(0, 100).limit(10).sorted().forEach(System.out::println);