lambda 表达式的几种常见形式

本篇文章记录了部分在工作、学习中用到的几个lambda 表达式。

更多的表达式可看下篇文章:lambda 表达式常用的一些写法。_lambda取最大值_不看路的蚂蚁的博客-CSDN博客

演示demo: 六花i/lambda-demo (gitee.com)

 1. 遍历操作

        List<String> list = Arrays.asList("阿伟寄了", "你挑的吗", "偶像");
        //1.1 常规遍历①
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //1.2 常规遍历②
        for (String var : list) {
            System.out.println(var);
        }
        //1.3 forEach遍历
        list.forEach( var -> {
            System.out.println(var);
        });
        //1.4 更进阶写法
        list.forEach(System.out::println);
        //1.5 没怎么见过的写法
        System.out.println(Stream.iterate(0, i -> i++).limit(list.size()).map(var ->{
            return list.get(var);
        }).collect(Collectors.toList()));

2. 排序操作

        List<String> list = Arrays.asList("阿伟寄了", "你挑的吗", "偶像");
        //2.1 普通排序
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        //2.2 lambda写法
        Collections.sort(list, ((o1, o2) -> o1.compareTo(o2)));
        //2.3 更进阶写法
        Collections.sort(list, (String::compareTo));
        System.out.println(list);
        //2.4 stream写法
        list = list.stream().sorted()
        .collect(Collectors.toList());

3. 集合元素相加

        List<Integer> list = Arrays.asList(1, 2, 3);
        //3.1 普通写法
        int sum = 0;
        for (Integer i : list) {
            sum += i;
        }
        System.out.println(sum);


        //3.2 steam写法
        System.out.println(list.stream().reduce(0, Integer::sum));

4. 找最大

        List<Integer> list = Arrays.asList(1, 2, 3,1);
        list.stream().max((Integer::compareTo)).ifPresent(System.out::println);

5. 分组操作

        List<String> list = Arrays.asList("阿伟寄了", "你挑的吗", "偶像","是我");
        //5.1 常规分组写法
        Map<Integer, List<String>> groups1 = new HashMap<>();
        for (String var : list) {
            int length = var.length();
            if (!groups1.containsKey(length)) {
                groups1.put(length, new ArrayList<>());
            }
            groups1.get(length).add(var);
        }
        System.out.println(groups1);
        //5.2 stream写法
        Map<Integer, List<String>> groups2 = list.stream().collect(Collectors.groupingBy(String::length));

6. 线程写法 

        //6.1 常规写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("a");
            }
        }).start();

        //6.2 lambda写法
        new Thread( () -> System.out.println("a")).start();

7. 条件判断

        String a = "abc";
        //1.普通写法
        if (a != null) {
            System.out.println(a.toUpperCase());
        }

        //2. 特殊写法
        Optional.ofNullable(a).map(String::toUpperCase).ifPresent(System.out::println);

猜你喜欢

转载自blog.csdn.net/weixin_58403235/article/details/134755828