Java8流示例

Java8流示例

import lombok.extern.slf4j.Slf4j;

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

@Slf4j(topic = "c.JStream")
public class JStream {

    public static void main(String[] args) {
        log.info("------------------------------------------------------------");
        log.info("使用Java7");
        List<String> strings = Arrays.asList("abc","","bc","efg","abc","","jk1");
        log.info("列表: {}", strings.toArray());
        long count = getCountEmptyStringJava7(strings);
        log.info("空字符串数量: {}", count);
        count = getCountLengthJava7(strings);
        log.info("字符串长度为3的数量为: {}", count);
        List<String> filtered = deleteEmptyStringJava7(strings);
        log.info("筛选后的列表: {}", filtered.toArray());
        String mergedString = getMergedStringJava7(strings, ",");
        log.info("合并字符串:{}", mergedString);
        List<Integer> numbers = Arrays.asList(3,2,2,3,7,3,5);
        List<Integer> squaresList = getSquares(numbers);
        log.info("平方数列表: {}", squaresList.toArray());
        List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);
        log.info("列表:{}, 列表中最大的数:{}, 最小的数:{}, 所有数之和:{}, 平均数:{}, 随机数: ", integers.toArray(),
                getMax(integers), getMin(integers), getSum(integers), getAverage(integers));
        Random random = new Random();
        for(int i=0;i<10;i++){
            log.info("{}", random.nextInt());
        }

        log.info("------------------------------------------------------------");
        log.info("使用Java8");
        log.info("列表: {}", strings.toArray());
        count = strings.stream().filter(String::isEmpty).count();
        log.info("空字符串数量为: {}", count);
        count = strings.stream().filter(str -> str.length() == 3).count();
        log.info("字符串长度为3的数量: {}", count);
        filtered = strings.stream().filter(str -> !str.isEmpty()).collect(Collectors.toList());
        log.info("筛选后的列表: {}", filtered.toArray());
        mergedString = strings.stream().filter(str -> !str.isEmpty()).collect(Collectors.joining(","));
        log.info("使用逗号合并后的字符串: {}", mergedString);
        squaresList = numbers.stream().map(i -> i^2).distinct().collect(Collectors.toList());
        log.info("平方数列表: {}", squaresList.toArray());
        IntSummaryStatistics statistics = integers.stream().mapToInt((x) -> x).summaryStatistics();
        log.info("列表:{}, 列表中最大的数:{}, 最小的数:{}, 所有数之和:{}, 平均数:{}, 随机数: ", integers.toArray(),
                statistics.getMax(), statistics.getMin(), statistics.getSum(), statistics.getAverage());
        random.ints().limit(10).sorted().forEach(p -> log.info("{}", p));
        count = strings.parallelStream().filter(String::isEmpty).count();
        log.info("空字符串数量为: {}", count);
    }

    private static int getAverage(List<Integer> numbers) {
        return getSum(numbers)/numbers.size();
    }

    private static int getSum(List<Integer> numbers) {
        int sum = numbers.get(0);
        for(int i=1;i < numbers.size();i++){
            sum += numbers.get(i);
        }
        return sum;
    }

    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 < min){
                min = number;
            }
        }
        return min;
    }

    private static int getMax(List<Integer> integers) {
        int max = integers.get(0);
        for(Integer i:integers){
            if(i > max){
                max = i;
            }
        }
        return max;
    }

    private static List<Integer> getSquares(List<Integer> numbers) {
        List<Integer> squaresList = new ArrayList<>();
        for(Integer number:numbers){
            Integer square = number ^ 2;
            if(!squaresList.contains(square)){
                squaresList.add(square);
            }
        }

        return squaresList;
    }

    private static String getMergedStringJava7(List<String> list, String separator) {
        StringBuilder builder = new StringBuilder();
        for(String str:list){
            if(!str.isEmpty()){
                builder.append(str).append(separator);
            }
        }

        String mergedString = builder.toString();
        return mergedString.substring(0, mergedString.lastIndexOf(separator));
    }

    private static List<String> deleteEmptyStringJava7(List<String> list){
        List<String> filteredList = new ArrayList<>(list.size());
        for(String str:list){
            if(!str.isEmpty()){
                filteredList.add(str);
            }
        }

        return filteredList;
    }

    private static long getCountLengthJava7(List<String> list){
        int count = 0;
        for(String str:list){
            if(!str.isEmpty() && str.length() == 3){
                count++;
            }
        }

        return count;
    }

    private static long getCountEmptyStringJava7(List<String> list){
        int count = 0;
        for(String str:list){
            if(str.isEmpty()){
                count++;
            }
        }

        return count;
    }
}

输出:

2022-09-14 20:49:09 [main] c.JStream - ------------------------------------------------------------
2022-09-14 20:49:09 [main] c.JStream - 使用Java7
2022-09-14 20:49:09 [main] c.JStream - 列表: abc
2022-09-14 20:49:09 [main] c.JStream - 空字符串数量: 2
2022-09-14 20:49:09 [main] c.JStream - 字符串长度为3的数量为: 4
2022-09-14 20:49:09 [main] c.JStream - 筛选后的列表: abc
2022-09-14 20:49:09 [main] c.JStream - 合并字符串:abc,bc,efg,abc,jk1
2022-09-14 20:49:09 [main] c.JStream - 平方数列表: 1
2022-09-14 20:49:09 [main] c.JStream - 列表:[1, 2, 13, 4, 15, 6, 17, 8, 19], 列表中最大的数:19, 最小的数:1, 所有数之和:85, 平均数:9, 随机数: 
2022-09-14 20:49:09 [main] c.JStream - 1761884609
2022-09-14 20:49:09 [main] c.JStream - 1816268500
2022-09-14 20:49:09 [main] c.JStream - 1046625388
2022-09-14 20:49:09 [main] c.JStream - -233711792
2022-09-14 20:49:09 [main] c.JStream - -1649647326
2022-09-14 20:49:09 [main] c.JStream - 983716357
2022-09-14 20:49:09 [main] c.JStream - -1930134793
2022-09-14 20:49:09 [main] c.JStream - -2141648801
2022-09-14 20:49:09 [main] c.JStream - -1946556390
2022-09-14 20:49:09 [main] c.JStream - 179283699
2022-09-14 20:49:09 [main] c.JStream - ------------------------------------------------------------
2022-09-14 20:49:09 [main] c.JStream - 使用Java8
2022-09-14 20:49:09 [main] c.JStream - 列表: abc
2022-09-14 20:49:09 [main] c.JStream - 空字符串数量为: 2
2022-09-14 20:49:09 [main] c.JStream - 字符串长度为3的数量: 4
2022-09-14 20:49:09 [main] c.JStream - 筛选后的列表: abc
2022-09-14 20:49:09 [main] c.JStream - 使用逗号合并后的字符串: abc,bc,efg,abc,jk1
2022-09-14 20:49:09 [main] c.JStream - 平方数列表: 1
2022-09-14 20:49:09 [main] c.JStream - 列表:[1, 2, 13, 4, 15, 6, 17, 8, 19], 列表中最大的数:19, 最小的数:1, 所有数之和:85, 平均数:9.444444444444445, 随机数: 
2022-09-14 20:49:09 [main] c.JStream - -1985482875
2022-09-14 20:49:09 [main] c.JStream - -1639968910
2022-09-14 20:49:09 [main] c.JStream - -1435708960
2022-09-14 20:49:09 [main] c.JStream - -155473287
2022-09-14 20:49:09 [main] c.JStream - 902389493
2022-09-14 20:49:09 [main] c.JStream - 1035272612
2022-09-14 20:49:09 [main] c.JStream - 1079306024
2022-09-14 20:49:09 [main] c.JStream - 1197110298
2022-09-14 20:49:09 [main] c.JStream - 1913795074
2022-09-14 20:49:09 [main] c.JStream - 1973786199
2022-09-14 20:49:09 [main] c.JStream - 空字符串数量为: 2

你可能感兴趣的:(java,java,算法,数据结构)