1. 程式人生 > >Java8新特性—Stream舉例

Java8新特性—Stream舉例

說明:分別用常規程式碼和Lambda舉例

  1. 計算集合空字串數量

    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
    boolean test(String s) { return s.isEmpty(); } }).count(); //3. Lambda表示式 count = strings.stream().filter(String::isEmpty).count(); //或 count = strings.stream().filter(s->s.isEmpty()).count(); System.out.println("空字串數量為:" + count);//2
  2. 計算集合字串長度為3的數量

    List<String> strings = Arrays.asList("abc"
    , "", "bc", "efg", "abcd", "", "jkl"); //1. 常規程式碼 long count = 0; for (String string : strings) { if (string.length() == 3) { count++; } } //2. Stream count = strings.stream().filter(new Predicate<String>() { @Override public boolean test(String s) { return
    s.length() == 3; } }).count(); //3. Lambda表示式 count = strings.stream().filter(string -> string.length() == 3).count(); System.out.println("字串長度為 3 的數量為: " + count);//3
  3. 刪除集合中的空字串

    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]
  4. 刪除集合中空字串並使用逗號把它們合併起來

    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
  5. 獲取集合元素的平方並去重

    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]
  6. 求最大最小平均總和等

    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
  7. 輸出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);

參考