文档章节

java8的list, map简化操作

yjpfj1203
 yjpfj1203
发布于 2016/09/18 00:11
字数 650
阅读 227
收藏 2

一:stream用法

    Stream类型有两种类型的方法

    中间操作(Intermediate Operation),结束操作(Terminal Operation)

      Stream之所以“懒”的秘密也在于每次在使用Stream时,都会连接多个中间操作,并在最后附上一个结束操作。 像map()和filter()这样的方法是中间操作,在调用它们时,会立即返回另一个Stream对象。而对于reduce()及findFirst()这样的方法,它们是结束操作,在调用它们时才会执行真正的操作来获取需要的值。

List<String> names = Arrays.asList("Brad", "Kate", "Kim", "Jack", "Joe", "Mike", "Susan", "George", "Robert", "Julia", "Parker", "Benson");

        final String firstNameWith3Letters = names.stream()
            .filter(name -> length(name) == 3)
            .map(name -> toUpper(name))
            .findFirst()
            .get();

    你可能认为以上的代码会对names集合进行很多操作,比如首先遍历一次集合得到长度为3的所有名字,再遍历一次filter得到的集合,将名字转换为大写。最后再从大写名字的集合中找到第一个并返回

  可是实际情况并不是这样,不要忘了Stream可是非常“懒”的,它不会执行任何多余的操作

  实际输出结果是

getting length for Brad
getting length for Kate
getting length for Kim
converting to uppercase: Kim
KIM

当结束操作获得了它需要的答案时,整个计算过程就结束了。如果没有获得到答案,那么它会要求中间操作对更多的集合元素进行计算,直到找到答案或者整个集合被处理完毕。

JDK会将所有的中间操作合并成一个,这个过程被称为熔断操作(Fusing Operation)。因此,在最坏的情况下(即集合中没有符合要求的元素),集合也只会被遍历一次,而不会像我们想象的那样执行了多次遍历。

点击打开链接

1:Arrays.Stream(Collect<T>)  

Collection<BaseEnumModel> enums = Arrays.stream(DemandSourceTypeEnum.values()).map(BaseEnumModel::new).collect(Collectors.toList());
public enum DemandSourceTypeEnum implements CreamsEnum {
    DOOR_TO_DOOR("上门"),
    TELEPHONE("电话"),
    AGENCY("中介");
    private String desc;

    DemandSourceTypeEnum(String desc) {
      this.desc =desc;
    }

    public String getDesc() {
        return desc;
    }
}

public interface CreamsEnum{
    String getDesc();
    String name();
}

public class BaseEnumModel{
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(Stringid) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public BaseEnumModel(CreamsEnum operation) {
        this.id = operation.name();
        this.name =operation.getDesc();
    }
}

Stream可用使用的常用方法,map(mapToInt, mapToDouble),

2:对象映射

  Collection<String> statuses 

List<BaseEnumModel> statuses =statuses.stream().map(status -> new BaseEnumModel(DemandStatusEnum.valueOf(status))).collect(Collectors.toList());

List<Long> longList = Arrays.stream(roomIdsString.split(",")).map(Long::parseLong).collect(Collectors.toList());

3:map的遍历

unitMap.forEach((k, v) -> {
  ......
});

Map<Long, Long> mapSortByKey = map.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1, e2) -> e1, LinkedHashMap::new));

4:filter操作

models.stream().filter(model -> model.getName().equals(name)).collect(Collectors.toList());

regions.stream().filter(region -> Objects.equals(region.getId(), model.getId())).collect(Collectors.toList());

 

© 著作权归作者所有

yjpfj1203
粉丝 3
博文 11
码字总数 4434
作品 0
杭州
程序员
私信 提问
java8的重要特性及其他,昨天答应的发java8╭(╯ε╰)╮

【注意】本文节选自是 DZone 指南 Java 生态系统的专题文章,作者Trisha Gee是Java资深工程师和布道者。在本文中,Trisha Gee阐述了Java 8的重要特性以及使用的原因,由OneAPM工程师翻译。 ...

默默学习中
2016/03/28
1K
9
为什么选择 Java 8 ?

本文是 DZone 指南 Java 生态系统的专题文章。点击链接可阅读更多见解深刻的文章、行业统计信息,系 OneAPM工程师编译整理。 在很多情况下,Java8 都能提升应用性能,而无需任何改变或性能调...

OneAPM蓝海讯通
2015/11/04
117
0
Java8 lambda使用总结-结合实例介绍

1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: 最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍 2.Java8 lambda使用总结-结合...

陈小扁
2016/07/01
2K
1
java8-lambda实战

前言 java8推出已经很久了,然而其新特性却几乎没有怎么用过。原因是既然已有的只是满足需求何必去学习新的?然而,随着敲代码越来越多,业务上有很多臃肿繁琐的判断校验之类的代码,使得代码...

RyanMiao
2016/11/20
29
0
Java8 Foreach操作

在这篇文章中我将向你演示如何使用Java8中的操作和 1. Foreach操作Map 1.1 正常方式遍历Map 1.2 使用Java8的+表达式遍历Map 2. Foreach操作List 2.1 普通方式循环List 2.2 在Java8中使用+表达...

王爵nice
2015/09/15
4.3K
4

没有更多内容

加载失败,请刷新页面

加载更多

性能优化

js相关 根据js时间线,将js放在最下面加载,先加载DOM,再加载js 懒执行,就是将某些逻辑延迟到使用时在执行。该技术可用于首屏优化,对于某些耗时逻辑并不需要在首屏就使用的,就可以使用懒...

祖达
3分钟前
0
0
websocket通信failed to execute 'send'问题的解决

在建立web socket通信后,发送数据时,出现下图所示现象: 问题代码演示 function TestSockets() { //实例化一个WebSocket对象 var socket = new WebSocket("ws://127.0.0.1:8000/w...

城市之雾
9分钟前
0
0
PHPStorm 如何设置 yaf 代码提示?

下载 php-yaf-doc git clone https://github.com/elad-yosifon/php-yaf-doc.git PHPStorm 如下设置 使用

whoru
10分钟前
0
0
typeorm drop foreign key

1. 问题描述 项目代码中使用typeorm进行mysql的数据操作, 昨天突然部署测试环境发现测试环境数据库的外键都为空了, 导致涉及的整个系统不可用. 2. 问题探究 尝试复现 mysqldump 线上数据, 然...

jimmywa
11分钟前
2
0
好程序员web前端开发测验之css部分

好程序员web前端开发测验之css部分Front End Web Development Quiz CSS 部分问题与解答 Q: CSS 属性是否区分大小写? <p><font size="3">  ul {</font></p> <p><font size="3">  MaRGin:......

好程序员IT
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部