Java8的重要特性(lambda表达式和流式编程)

本文详细介绍并演示了 Java 8 的新特性,包括 lambda 表达式、流式编程、方法引用、Optional 类等。通过具体代码示例展示了如何进行集合操作、排序、过滤、并行计算及处理空指针等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 1.lambda表达式
 * 2.stream编程
 * 3.方法与构造函数引用,允许你使用 :: 关键字来传递方法或者构造函数引用(非静态方法)
 * 4.optional解决空指针异常
 * 5.
 */
public class Main {
    private static List<String> list = Arrays.asList("a", "b", "c","e","d");

    public static void main(String[] args) {
        System.out.println(Java8.staticMethod());
        new Java8Impl(System.out::println);
        //原始集合排序和lambda排序
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });

        list.sort((o1, o2) -> o1.compareTo(o2));
        //与上面代码功能一样  类(或实例对象) :: 方法
        list.sort(String::compareTo);

        //流式编程
        stream();

        //解决空指针
        optional();
    }

    private static void stream() {
        System.out.println("遍历集合");
        Consumer<String> consumer = System.out::println;
        list.forEach(consumer);

        System.out.println("过滤字符串是a和b");
        list.stream()
                .filter((p) -> "a".equals(p))
                .filter((p) -> "b".equals(p))
                .forEach(consumer);

        System.out.println("选出前2个");
        list.stream()
                .limit(2)
                .forEach(consumer);


        list = Arrays.asList("a", "b", "c", "e", "d");
        System.out.println("排序");
        List<String> sortList = list.stream()
                .sorted((s1, s2) -> s1.compareTo(s2))
                .collect(Collectors.toList());
        sortList.forEach(System.out::println);

        System.out.println("排序后的最高一个和最低一个(在数值上比较好理解)");
        String max=list.stream()
                .max(String::compareTo)
                .get();
        System.out.println(max);
        String min=list.stream()
                .min(String::compareTo)
                .get();
        System.out.println(min);

        System.out.println("结合map(),可以使用collect()将结果放到字符串,set或treeSet中");
        String collectStr = list.stream()
                .map(s -> s + "1")
                .collect(Collectors.joining(";"));
        System.out.println(collectStr);
        Set<String> set=list.stream().map(s->s+"1").collect(Collectors.toSet());
        TreeSet<String> treeSet=list.stream().map(s->s+"1").collect(Collectors.toCollection(TreeSet::new));

        System.out.println("并行(parallelStream)计算总和(sum)");
        List<Integer> intList=Arrays.asList(1,2,3);
        int sum = intList.parallelStream()
                .mapToInt(i->i)
                .sum();
        System.out.println(sum);

        System.out.println("使用summaryStatistics方法获得stream 中元素的各种汇总数据");
        IntSummaryStatistics intSummaryStatistics = intList.stream()
                .mapToInt(i -> i)
                .summaryStatistics();
        System.out.println("平均值="+intSummaryStatistics.getAverage());
        System.out.println("大小="+intSummaryStatistics.getCount());
        System.out.println("最大值="+intSummaryStatistics.getMax());
    }

    private static void optional() {
        String str=null;
        //如果Optional实例持有一个非空值,则isPresent()方法返回true,否则返回false;
        Optional<String> optionalS=Optional.ofNullable(str);
        boolean isNotNull = optionalS.isPresent();
        if (isNotNull){
            System.out.println(optionalS.get());
        }
        //在持有null的时候返回传入的默认值。orElse()和orElseGet()方法类似
        System.out.println(optionalS.orElse("defaulValue"));
        System.out.println(optionalS.orElseGet(()->"defaultValue"));
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大侠在江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值