文档章节

java 8 lambda 学习(二)

H
 Haloooooo
发布于 2017/07/24 22:44
字数 398
阅读 17
收藏 0

 

allArtists.stream()

    .filter(artist -> artist.isForm("London"));

惰性求值方法 只描述了stream 并没有产生新集合

allArtists.stream()

    .filter(artist -> artist.isForm("London"))

    .count();

及早求值方法 从stream中产生值的方法

allArtists.stream()

    .filter(artist ->{

        System.out.println("aa");

        return artist.isForm("London")

    });

因为是惰性求值方法所以不会打印任何语句,当代码追加count()后变为及早求值方法,运行后会打印

 

 

Stream API

of 方法用一组初始值生成新的stream

collect 及早求值方法 从stream中生成一个列表

java.util.stream.Collectors
List<String> collected = Stream.of("a","b")
        .collect(Collectors.toList());
assert(Arrays.asList("a","b") == collected); // 断言判断

map 将一个流的值转换成新的流

List<String> collected2 = Stream.of("a","b")
        .map(string -> string.toUpperCase())
        .collect(Collectors.toList());
assertEquals(Arrays.asList("A","B"),collected2);

filter 过滤元素 

flatMap 将多个列表转化成一个列表

List<List<Integer>> lists = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4))
        .collect(Collectors.toList());
List<Integer> list = Stream.of(Arrays.asList(1,2),Arrays.asList(3,4))
        .flatMap(number -> number.stream())
        .collect(Collectors.toList());
assertEquals(Arrays.asList(1,2,3,4),list);

max min 返回最大最小值 

max min 返回Optional 对象,Optional 表示一个可能存在也可能不存在的值 ,如果stream 为空则不存在 调用get方法可以取出Optional的值

class TestClass{
    private String name;
    private int number;

    public TestClass(String name, int number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

@Test
public void testMaxAndMin(){
    List<TestClass> list = Arrays.asList(new TestClass("halo",999),
            new TestClass("Violets",111),
            new TestClass("hello",555));
    TestClass maxTarget = list.stream()
            .max(Comparator.comparing(testClass -> testClass.getNumber()))
            .get();

    assertEquals(list.get(0),maxTarget);

    TestClass minTarget = list.stream()
            .min(Comparator.comparing(testClass -> testClass.getNumber()))
            .get();

    assertEquals(list.get(1),minTarget);
}

reduce 返回累加和 acc 为累加器

(acc,element) -> acc+element 是BinartOperator

int count = Stream.of(1,2,3,4)
        .reduce(0,(acc,element) -> acc+element);
assertEquals(10,count);

 

© 著作权归作者所有

H
粉丝 0
博文 33
码字总数 37558
作品 0
青岛
程序员
私信 提问
Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy
2018/06/06
330
2
Java8 Lambda【简】

Java8 Lambda Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。 ...

anlve
2018/03/08
63
0
Java 8里面lambda的最佳实践

Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了...

OSC闲人
2015/04/30
9.9K
41
【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever
2018/03/20
0
0
Java8学习:Lambda表达式与Functional接口

Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据:函数式程序员对...

王爵nice
2014/07/03
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
34分钟前
3
0
Spring Security 实战干货:必须掌握的一些内置 Filter

1. 前言 上一文我们使用 Spring Security 实现了各种登录聚合的场面。其中我们是通过在 UsernamePasswordAuthenticationFilter 之前一个自定义的过滤器实现的。我怎么知道自定义过滤器要加在...

码农小胖哥
37分钟前
6
0
常见分布式事务解决方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源...

asdf08442a
37分钟前
3
0
influxdb continuous queries(cq)从入门到放弃

从前一篇influxdb的文章prometheus基于influxdb的监控数据持久化存储方案完成之后,就一直在折腾influxdb发布测试和生产环境的问题,经过接近2个月的验证,最终发现使用influxdb自带cq的方案...

狗陈
49分钟前
7
0
7.线程通信

在现实生活中,如果一个人团队正在共同完成任务,那么他们之间应该有通信,以便正确完成任务。 同样的比喻也适用于线程。 在编程中,要减少处理器的理想时间,我们创建了多个线程,并为每个线...

Eappo_Geng
54分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部