美文网首页
走进java世界2--java8 lambda

走进java世界2--java8 lambda

作者: 一万年不是尽头 | 来源:发表于2019-01-30 17:33 被阅读0次

1、基本用法

匿名内部类

  • java8之前
Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        //do something
    }
});
t.start();
  • java8
Thread t = new Thread(() -> {
    //do something
});
t.start();

赋值

  • before
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        //do something      
    }
};
  • now
Runnable runnable = () -> {
    //do something
};

方法引用

  • before
List<String> datas = new ArrayList<>();
datas.add("a");
datas.add("b");
for(String data:datas){
    System.out.println(data);
}

注意

如果没有说明,下文若出现datas变量都为上面的定义

  • now
//原始的匿名内部类
datas.forEach(new Consumer<String>() {
    @Override
    public void accept(String data) {
        System.out.println(data);
    }
});
//采用表达式(方式1)
datas.forEach((data) -> {
    System.out.println(data);
});

//采用表达式(方式1)
datas.forEach(data -> System.out.println(data));

/*
*如果像这个例子,代码只有一行,且参数是迭代的对象,那么可以试用
*方法引用过进一步减少代码
*/
datas.forEach(System.out::println);

2、常用接口用例

遍历List集合

datas.forEach(data -> System.out.println(data));

过滤List集合数据

List<String> result = datas.stream()
    .filter(data -> data.startsWith("a"))//过滤,此处是Predicate接口的实现
    .collect(Collectors.toList());

转换类型

List<List<String>> result = datas.stream()
    .flatMap(data -> Stream.of(Collections.singletonList(data)))
    .collect(Collectors.toList())

经过上面的代码我们就把List<String>转换成了List<List<String>>,外层List的泛型具体是什么是由Stream.of(Collections.singletonList(data))这个方法的参数类型决定的。

以上三个是比较常用的函数式接口的操作,其主要都是Stream这个接口在的方法,里面还定义了很多接口。有兴趣的读者可以自行研究。
求赞!求赞!求赞!

相关文章

网友评论

      本文标题:走进java世界2--java8 lambda

      本文链接:https://www.haomeiwen.com/subject/fjmcsqtx.html