Lambda表达式和Stream流式编程

Lambda表达式和Stream流式编程IDEA都默认是jdk11了,我这还写着jdk8的新特性呢,惭愧惭愧。其实在学校的时候,基本没咋用过Lambda表达式和Stream流式编程,但是在实习的时候,发现公司的代码好多这样写的,没办法,总结一下吧。Lambda表达式首先我们得搞明白,Lambda表达式的作用,它主要是用来对集合的操作或者是对函数式接口的操作,所谓函数式接口,也就是只有一个方法的接口,通常用@FunctionInterface来标注。先说说语法Lambda表达式的语法很简单,就是()->{},然后.

Lambda表达式和Stream流式编程

写在前面

IDEA都默认是jdk11了,我这还写着jdk8的新特性呢,惭愧惭愧。其实在学校的时候,基本没咋用过Lambda表达式和Stream流式编程,但是在实习的时候,发现公司的代码好多这样写的,没办法,总结一下吧。

Lambda表达式

首先我们得搞明白,Lambda表达式的作用,它主要是用来对集合的操作或者是对函数式接口的操作,所谓函数式接口,也就是只有一个方法的接口,通常用@FunctionInterface来标注。
先说说语法

Lambda表达式的语法很简单,就是() -> {},然后有一个操作,能省就省,也就是说,如果()里只有一个参数,那么可以不带(),同理,如果{}里只有一句话,也可以省略{},当然不省略也可以。

对List集合遍历

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.forEach(s -> {
    System.out.println(s);
});

对map集合遍历

Map<String, String> map = new HashMap<>();
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc");
map.forEach((k, v) -> {
    System.out.println(k + "===" + v);
});

对函数式接口的操作
定义一个无返回值无参数的函数式接口

@FunctionalInterface
public interface GetHelloWorld {
    void getHelloWorld();
}

实现

GetHelloWorld getHelloWorld = () -> {
    System.out.println("hello world");
};
getHelloWorld.getHelloWorld();

定义一个有返回值有参数的

@FunctionalInterface
public interface GetHelloWorld {
    int getHelloWorld(int a, int b);
}

实现

GetHelloWorld getHelloWorld = (a, b) -> {
    System.out.println("hello world");
    return a + b;
};
System.out.println(getHelloWorld.getHelloWorld(1, 2));

再举一个创建线程的例子

Runnable runnable = () -> {
    System.out.println("hello world");
};
new Thread(runnable).start();

// 等价于上面的操作
new Thread(() -> {
    System.out.println("hello world");
}).start();

lambda表达式就暂时说这么多,下面说说Stream流式编程。

Stream流式编程

流式编程一共分为三个阶段,一是创建流(集合通过.stream()方法可以创建流),二是执行中间操作,三是执行最终操作,流式编程一般是对集合的操作。

案例一
例如我们对集合元素进行去重

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("bbb");
list.add("ccc");
Stream<String> stream = list.stream();
stream.distinct().forEach(s -> System.out.println(s));

案例二
对集合进行过滤

List<Integer> list = new ArrayList<>();
list.add(20);
list.add(18);
list.add(25);
list.add(16);
Stream<Integer> stream = list.stream();
stream.filter(x -> x >= 20).forEach(s -> System.out.println(s));

案例三
对集合排序,默认是从小到大,这里演示从大到小

List<Integer> list = new ArrayList<>();
list.add(20);
list.add(18);
list.add(25);
list.add(16);
Stream<Integer> stream = list.stream();
stream.sorted((x, y) -> y - x).forEach(s -> System.out.println(s));

案例四
对集合做映射输出

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("bbb");
list.add("zzz");
list.add("ddd");
Stream<String> stream = list.stream();
stream.map(s -> s.length()).forEach(s -> System.out.println(s));

案例五
对集合去重后数量统计

List<Integer> list = new ArrayList<>();
list.add(22);
list.add(13);
list.add(15);
list.add(15);
Stream<Integer> stream = list.stream();
long count = stream.distinct().parallel().count();
System.out.println(count);

到这里应该能感受到流式编程了吧,其实就是有很多骚操作我们可以直接调用,减少了代码量,提高了开发效率,当然流式编程不止这么些操作,还有其他的,感兴趣的可以研究一下。

今天的文章Lambda表达式和Stream流式编程分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11564.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注