走进java世界2--java8 lambda

2019-01-30  本文已影响0人  一万年不是尽头

1、基本用法

匿名内部类

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

赋值

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

方法引用

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

注意

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

//原始的匿名内部类
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这个接口在的方法,里面还定义了很多接口。有兴趣的读者可以自行研究。
求赞!求赞!求赞!

上一篇 下一篇

猜你喜欢

热点阅读