zoukankan      html  css  js  c++  java
  • Java 8 Stream

    Java 8 Stream

    Java 8 API 添加了一个新的抽象称为流 Stream,可以让你以一种声明的方式处理数据。
    Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
    Stream API 可以极大提高 Java 程序员的生产力,让程序员写出高效率、干净、简洁的代码。
    这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
    元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作 (terminal operation) 得到前面处理的结果。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.IntSummaryStatistics;
    import java.util.List;
    import java.util.Random;
    import java.util.stream.Collectors;
    
    public class Java8Stream {
        public static void main(String args[]) {
            List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
    
            System.out.println("使用 Java 7: ");
            // 计算空字符串
            System.out.println("列表: " + strings);
            long count = getCountEmptyStringUsingJava7(strings);
            System.out.println("空字符数量为: " + count);
    
            // 计算长度为 3的字符串
            count = getCountLength3UsingJava7(strings);
            System.out.println("字符串长度为 3 的数量为: " + count);
    
            // 删除空字符串
            List<String> filtered = deleteEmptyStringsUsingJava7(strings);
            System.out.println("筛选后的列表: " + filtered);
    
            // 删除空字符串,并使用逗号把它们合并起来
            String mergedString = getMergedStringUsingJava7(strings, ", ");
            System.out.println("合并字符串: " + mergedString);
    
            List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            // 获取列表元素平方数
            List<Integer> squaresList = getSquares(numbers);
            System.out.println("平方数列表: " + squaresList);
    
            List<Integer> integers = Arrays.asList(1, 2, 13, 4, 15, 6, 17, 8, 19);
            System.out.println("列表: " + integers);
            System.out.println("列表中最大的数 : " + getMax(integers));
            System.out.println("列表中最小的数 : " + getMin(integers));
            System.out.println("所有数之和 : " + getSum(integers));
            System.out.println("平均数 : " + getAverage(integers));
    
            // 输出5个随机数
            System.out.println("随机数: ");
            Random random = new Random();
            for (int i = 0; i < 5; i++) {
                System.out.println(random.nextInt());
            }
    
            System.out.println("------------------------------------");
            System.out.println("使用 Java 8: ");
            System.out.println("列表: " + strings);
    
            count = strings.stream().filter(string -> string.isEmpty()).count();
            System.out.println("空字符串数量为: " + count);
    
            count = strings.stream().filter(string -> string.length() == 3).count();
            System.out.println("字符串长度为 3 的数量为: " + count);
    
            filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
            System.out.println("筛选后的列表: " + filtered);
    
            mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
            System.out.println("合并字符串: " + mergedString);
    
            squaresList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
            System.out.println("Squares List: " + squaresList);
    
            System.out.println("列表: " + integers);
            IntSummaryStatistics stats = integers.stream().mapToInt((x) -> x).summaryStatistics();
            System.out.println("列表中最大的数 : " + stats.getMax());
            System.out.println("列表中最小的数 : " + stats.getMin());
            System.out.println("所有数之和 : " + stats.getSum());
            System.out.println("平均数 : " + stats.getAverage());
            System.out.println("随机数: ");
    
            random.ints().limit(5).sorted().forEach(System.out::println);
    
            // 并行处理
            count = strings.parallelStream().filter(string -> string.isEmpty()).count();
            System.out.println("空字符串的数量为: " + count);
        }
    
        private static int getCountEmptyStringUsingJava7(List<String> strings) {
            int count = 0;
    
            for (String string : strings) {
    
                if (string.isEmpty()) {
                    count++;
                }
            }
            return count;
        }
    
        private static int getCountLength3UsingJava7(List<String> strings) {
            int count = 0;
    
            for (String string : strings) {
    
                if (string.length() == 3) {
                    count++;
                }
            }
            return count;
        }
    
        private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) {
            List<String> filteredList = new ArrayList<String>();
    
            for (String string : strings) {
    
                if (!string.isEmpty()) {
                    filteredList.add(string);
                }
            }
            return filteredList;
        }
    
        private static String getMergedStringUsingJava7(List<String> strings, String separator) {
            StringBuilder stringBuilder = new StringBuilder();
    
            for (String string : strings) {
    
                if (!string.isEmpty()) {
                    stringBuilder.append(string);
                    stringBuilder.append(separator);
                }
            }
            String mergedString = stringBuilder.toString();
            return mergedString.substring(0, mergedString.length() - 2);
        }
    
        private static List<Integer> getSquares(List<Integer> numbers) {
            List<Integer> squaresList = new ArrayList<Integer>();
    
            for (Integer number : numbers) {
                Integer square = new Integer(number.intValue() * number.intValue());
    
                if (!squaresList.contains(square)) {
                    squaresList.add(square);
                }
            }
            return squaresList;
        }
    
        private static int getMax(List<Integer> numbers) {
            int max = numbers.get(0);
    
            for (int i = 1; i < numbers.size(); i++) {
    
                Integer number = numbers.get(i);
    
                if (number.intValue() > max) {
                    max = number.intValue();
                }
            }
            return max;
        }
    
        private static int getMin(List<Integer> numbers) {
            int min = numbers.get(0);
    
            for (int i = 1; i < numbers.size(); i++) {
                Integer number = numbers.get(i);
    
                if (number.intValue() < min) {
                    min = number.intValue();
                }
            }
            return min;
        }
    
        private static int getSum(List<Integer> numbers) {
            int sum = (int) (numbers.get(0));
    
            for (int i = 1; i < numbers.size(); i++) {
                sum += (int) numbers.get(i);
            }
            return sum;
        }
    
        private static int getAverage(List<Integer> numbers) {
            return getSum(numbers) / numbers.size();
        }
    }
    

    点击查看结果

    ``` 使用 Java 7: 列表: [abc, , bc, efg, abcd, , jkl] 空字符数量为: 2 字符串长度为 3 的数量为: 3 筛选后的列表: [abc, bc, efg, abcd, jkl] 合并字符串: abc, bc, efg, abcd, jkl 平方数列表: [9, 4, 49, 25] 列表: [1, 2, 13, 4, 15, 6, 17, 8, 19] 列表中最大的数 : 19 列表中最小的数 : 1 所有数之和 : 85 平均数 : 9 随机数: -1798271818 794022668 -1139301567 1143351249 2108643921 ------------------------------------ 使用 Java 8: 列表: [abc, , bc, efg, abcd, , jkl] 空字符串数量为: 2 字符串长度为 3 的数量为: 3 筛选后的列表: [abc, bc, efg, abcd, jkl] 合并字符串: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] 列表: [1, 2, 13, 4, 15, 6, 17, 8, 19] 列表中最大的数 : 19 列表中最小的数 : 1 所有数之和 : 85 平均数 : 9.444444444444445 随机数: -1654876050 -778143827 -503888574 54962288 1320389311 空字符串的数量为: 2 ```

    参考链接

  • 相关阅读:
    wordpress建个人博客
    函数(一)
    字符串格式化
    集合运算
    基本数据类型(二)
    基本数据类型(一)
    分享一个下片神器
    Proxyee
    基本运算符
    条件语句和while循环
  • 原文地址:https://www.cnblogs.com/hgnulb/p/10054940.html
Copyright © 2011-2022 走看看