import java.util.*;
import java.util.stream.Collectors;

public class StreamTest {
    public static void main(String[] args) {

        System.out.println("--- 使用 Java 7 ---");
        // String 字符串的操作
        List<String> strList = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        System.out.println("--- 列表:" + strList);
        // 计算列表中和空字符串的数量
        long emptyCount = getCountEmptyStringUsingJava7(strList);
        System.out.println("--- 空字符数量为:" + emptyCount);
        // 计算列表中长度为 3 的字符串的数量
        long thirdCount = getCountLength3UsingJava7(strList);
        System.out.println("--- 字符串长度为 3 的数量为:" + thirdCount);
        // 删除空字符串
        List<String> deleteStr = deleteEmptyStringsUsingJava7(strList);
        System.out.println("--- 删除空字符串之后的列表: " + deleteStr);
        // 删除空字符串,并使用逗号把非空的各个字符串合并
        String mergedNotEmptyStr = getMergedStringUsingJava7(strList,", ");
        System.out.println("--- 合并字符串:" + mergedNotEmptyStr);
        // 整型数据的操作
        List<Integer> intList = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        System.out.println("--- 列表1: " + intList);
        // 对列表中的每个元素求平方
        List<Integer> squaresList = getSquares(intList);
        System.out.println("--- 对列表1中各元素求平方:" + squaresList);
        // 对列表进行 max、min 等操作
        List<Integer> numberList = Arrays.asList(1,2,13,4,15,6,17,8,19);
        System.out.println("--- 列表2: " + numberList);
        System.out.println("--- 列表2中最大的数是:" + getMax(numberList));
        System.out.println("--- 列表2中最小的数是:" + getMin(numberList));
        System.out.println("--- 列表2中的所有数之和是:" + getSum(numberList));
        System.out.println("--- 列表2中各数的平均数是:" + getAverage(numberList));
        // 随机数的操作
        System.out.println("--- 随机数:");
        // 输出10个随机数
        Random random = new Random();
        for(int i = 0; i < 10; i++){
            System.out.println(i + 1 + ": " + random.nextInt());
        }

        System.out.println();
        System.out.println("--- 使用 Java 8 ---");
        System.out.println("--- 列表:" + strList);
        // 使用 Java 8 语法求空字符串的数量
        emptyCount = strList.stream().filter(string -> string.isEmpty()).count();
        System.out.println("--- 空字符串数量为:" + emptyCount);
        // 并行处理,计算空字符串的数量空字符串
        emptyCount = strList.parallelStream().filter(string -> string.isEmpty()).count();
        System.out.println("--- 并行计算空字符串的数量为: " + emptyCount);
        // 使用 Java 8 语法求字符串长度为3的字符串数量
        thirdCount = strList.stream().filter(string -> string.length() == 3).count();
        System.out.println("--- 字符串长度为 3 的数量为:" + thirdCount);
        // 使用 Java 8 语法将空字符串过滤
        List<String> filterStr= strList.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
        System.out.println("--- 过滤掉空字符串之后的列表:" + filterStr);
        // 用逗号将非空字符串连接成一个字符串
        String mergedString = strList.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(","));
        System.out.println("--- 合并非空字符串:" + mergedString);
        // 对整型数据类型的列表中的各个元素使用 Java 8 语法求平方
        squaresList = intList.stream().map( i -> i * i).distinct().collect(Collectors.toList());
        System.out.println("--- 使用 Java 8 语法对列表1各元素求平方之后:" + squaresList);
        // 输出用于计算 max、min 等的列表
        System.out.println("--- 列表2:" + numberList);
        // 对列表进行统一计算,即 max、min、avg等
        IntSummaryStatistics result = numberList.stream().mapToInt((x) -> x).summaryStatistics();
        System.out.println("--- 列表2中最大的数是:" + result.getMax());
        System.out.println("--- 列表2中最小的数是:" + result.getMin());
        System.out.println("--- 列表2中的所有数之和是:" + result.getSum());
        System.out.println("--- 列表2中的所有数的平均数是:" + result.getAverage());
        // Java 8 对随机数的操作
        System.out.println("--- Java 8 输出有序随机数:");
        random.ints().limit(10).sorted().forEach(System.out::println);

    }

    /**
     * 计算空字符串的数量
     * @param strings
     * @return
     */
    private static int getCountEmptyStringUsingJava7(List<String> strings){
        int count = 0;
        for(String string: strings){
            if(string.isEmpty()){
                count++;
            }
        }
        return count;
    }

    /**
     * 计算长度为3的字符串的数量
     * @param strings
     * @return
     */
    private static int getCountLength3UsingJava7(List<String> strings){
        int count = 0;
        for(String string: strings){
            if(string.length() == 3){
                count++;
            }
        }
        return count;
    }

    /**
     * 删除空字符串
     * @param strings
     * @return
     */
    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;
    }
    /**
     * 合并非空字符串
     * @param strings
     * @param separator
     * @return
     */
    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);
    }

    /**
     * 对列表中的各元素求平方
     * @param numbers
     * @return
     */
    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;
    }
    /**
     * 求列表中元素的最大值
     * @param numbers
     * @return
     */
    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;
    }
    /**
     * 求列表中元素的最小值
     * @param numbers
     * @return
     */
    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;
    }
    /**
     * 对列表中元素求和
     * @param numbers
     * @return
     */
    private static int getSum(List numbers){
        int sum = (int)(numbers.get(0));
        for(int i=1;i < numbers.size();i++){
            sum += (int)numbers.get(i);
        }
        return sum;
    }
    /**
     * 对列表中元素求平均值
     * @param numbers
     * @return
     */
    private static int getAverage(List<Integer> numbers){
        return getSum(numbers) / numbers.size();
    }

}

java stream 对BigDecimal 求和 java stream count_System

java stream 对BigDecimal 求和 java stream count_System_02

java stream 对BigDecimal 求和 java stream count_Stream 示例_03

 

 

示例:将列表中的元素求平方之后排序输出各平方值;字符串列表转map

import java.util.*;
import java.util.stream.Collectors;

public class StreamTest {
    public static void main(String[] args) {

        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        System.out.println("--- 列表:" + numbers);
        // 求列表中各数的平方,不去重
        List<Integer> squares = numbers.stream().map( i -> i * i).collect(Collectors.toList());
        System.out.print("--- 列表中各数的平方为:" + squares);
        System.out.println();
        List<Integer> squaresDistinct = numbers.stream().map( i -> i * i).distinct().collect(Collectors.toList());
        System.out.print("--- 列表中各数的平方去重之后为:" + squaresDistinct);
        System.out.println();
        // 对列表中的元素求平方并排序输出
        List<Integer> squaresSort = numbers.stream()
                .map(i -> i * i)
                .sorted((x, y) -> x - y)
                .collect(Collectors.toList());
        System.out.println("--- 升序输出列表中的元素的平方:");
        squaresSort.forEach(num -> {
            System.out.print(num + " ");
        });
        List<Integer> squaresSortReverse = numbers.stream()
                .map(i -> i * i)
                .sorted((x, y) -> y - x)
                .collect(Collectors.toList());
        System.out.println("\n" + "--- 降序输出列表中的元素的平方:");
        squaresSortReverse.forEach(num -> {
            System.out.print(num + " ");
        });
        System.out.println("\n" + "--- 字符串转 map ---");
        List<String> strList = Arrays.asList("a", "ba", "bb", "abc", "cbb", "bba", "cab");
        Map<Integer, String> strMap = new HashMap<Integer, String>();
        strMap = strList.stream().collect(Collectors.toMap(str -> strList.indexOf(str), str -> str));
        strMap.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });

    }
}

java stream 对BigDecimal 求和 java stream count_Stream 示例_04