IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

Java8中新增的Stream API

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

测试数据:

private static List<String> getList() {
    List<String> list = new ArrayList<>();
    list.add("a1");
    list.add("a2");
    list.add("a3");
    list.add("a4");
    list.add("b1");
    list.add("b2");
    list.add("b3");
    list.add("b4");
    return list;
}

private static List<String> getList2() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        return list;
}

1、迭代:

List<String> list = getList();
//Java8之前的迭代
for (String s : list) {
    System.out.println(s);
}

//Stream API的迭代
list.forEach(System.out::println);

2、过滤某些元素:

#

//过滤掉不以a开头的字符串
        List<String> list = getList();
        for (Iterator<String> i = list.iterator();i.hasNext();) {
            String s = i.next();
            if(!s.startsWith("a"))
                i.remove();
        }
        System.out.println(list);

        //Stream API
        List<String> list2 = getList();
        list2 = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
        System.out.println(list2);

3、转换:

//String 转换成 Integer
        List<String> list = getList2();
        List<Integer> list2 = new ArrayList<>();
        for (String s : list) {
            list2.add(Integer.valueOf(s));
        }
        System.out.println(list2);

        //Stream API
        List<String> list3 = getList2();
        List<Integer> list4 = list3.stream().map(Integer :: valueOf).collect(Collectors.toList());
        System.out.println(list4);

4、几个简单的聚合方法:

//聚合方法
        List<String> list = getList();
        List<String> list2 = getList2();
        //最大值
        Optional<String> max = list2.stream().max(String :: compareTo);
        System.out.println(max.get());
        //最小值
        Optional<String> min = list2.stream().min(String :: compareTo);
        System.out.println(min.get());
        //找到第一个以a开头的元素
        Optional<String> first = list.stream().filter(s -> s.startsWith("a")).findFirst();
        System.out.println(first.get());
        //查找一个以a开头的元素(不是按顺序查找),parallelStream是并行执行计算的流
        Optional<String> findAny = list.parallelStream().filter(s -> s.startsWith("a")).findAny();
        System.out.println(findAny.get());
        //查找是否存在以a开头的元素
        boolean anyMatch = list.parallelStream().anyMatch(s -> s.startsWith("a"));
        System.out.println(anyMatch);
        //是否每个元素都是以a开头
        boolean allMatch = list.parallelStream().allMatch(s -> s.startsWith("a"));
        System.out.println(allMatch);
        //是否每个元素都不是以c开头
        boolean noneMatch = list.parallelStream().noneMatch(s -> s.startsWith("c"));
        System.out.println(noneMatch);

上面大部分操作都返回一个Optional类,下面介绍

5、Optional的基本用法:

//Optional的基本用法
        List<String> list = getList();
        Optional<String> findAny = list.parallelStream().filter(s -> s.startsWith("a")).findAny();
        //1、显示判断,如果存在符合条件的元素,则取出来打印(个人不常用)
        if(findAny.isPresent()){
            System.out.println(findAny.get());
        }
        //2、如果存在符合条件的元素,则取出来打印,如果不存在,则什么都不做
        findAny.ifPresent(System.out::println);

        Optional<String> findAny2 = list.parallelStream().filter(s -> s.startsWith("c")).findAny();
        //3、如果不存在符合条件的元素,则用""代替
        System.out.println(findAny2.orElse(""));
        //4、如果不存在符合条件的元素,则用计算的结果代替
        String orElseGet = findAny2.orElseGet(() ->{
            if(System.currentTimeMillis() % 2 == 0)
                return "a99";
            return "";
        });
        System.out.println(orElseGet);
        //5、如果不存在符合条件的元素,则抛出异常
        findAny2.orElseThrow(RuntimeException :: new);

6、收集:

#

//收集,把结果收集组合成MAP
        List<String> list = getList();
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
        System.out.println(collect);

7、并行流parallel的注意事项:

需要确保传递给并行流操作的函数都是线程安全的,

例如,这样做会有问题:

List<String> list = getList();
        List<String> list2 = new ArrayList<>();
        list.parallelStream().forEach(s -> {
            //一定的转换后封装到另一个list
            list2.add(s+"ff");
        }); 
        System.out.println(list.size());
        System.out.println(list2.size());

可以改成这样:

List<String> list = getList();
        List<String> list2 = Collections.synchronizedList(new ArrayList<>());
        list.parallelStream().forEach(s -> {
            //一定的转换后封装到另一个list
            list2.add(s+"ff");
        }); 
        System.out.println(list.size());
        System.out.println(list2.size());

文章永久链接:https://tech.souyunku.com/?p=13151


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(76) 打赏



未经允许不得转载:搜云库技术团队 » Java8中新增的Stream API

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367