资讯专栏INFORMATION COLUMN

Top stackoverflow 问答系列之Java 8 Stream 篇 (一)

z2xy / 3414人阅读

摘要:从发布到现在,已有三年多了,也得到了广泛的应用,但似乎里面最重要的特性和对很多人来说还是很陌生。想通过介绍一些实际的问题和答案来讲解在现实开发中我们可以通过和可以做些什么,以及什么是正确的姿势。

从Java 8 2014 发布到现在,已有三年多了,JDK 8 也得到了广泛的应用,但似乎Java 8里面最重要的特性:Lambdas和Stream APIs对很多人来说还是很陌生。想通过介绍Stackoverflow一些实际的问题和答案来讲解在现实开发中我们可以通过Lambdas和Stream APIs可以做些什么,以及什么是正确的姿势。在介绍那些问答之前,我们先要对Java 8 和Stream APIs有些基本的了解,这里推荐几篇文章:

java.util.stream 库简介

Java 8 中的 Streams API 详解

What"s New in Java 8

如果你对Java 8 Lambds和Stream APIs还不是很了解,建议先把上面的几篇文章看几遍。
接下来是问答:

1. Java 8 List into Map
有一个List choices, 要把它转换成一个Map, Map的Key是Choice的名称,Value是Choice,如果用Java 7,代码将是:

private Map nameMap(List choices) {
    final Map hashMap = new HashMap<>();
    for (final Choice choice : choices) {
        hashMap.put(choice.getName(), choice);
    }
    return hashMap;
}

【答案】
如果能确保Choicename没有重复的

Map result =
        choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));

如果name有重复的,上面的代码会抛IllegalStateException,要用下面的代码,

Map> result =
        choices.stream().collect(Collectors.groupingBy(Choice::getName));

2. How to Convert a Java 8 Stream to an Array?
什么是最简便的方式把一个Stream转换成数组:

【答案】

String[] strArray = Stream.of("a", "b", "c")toArray(size -> new String[size]);

int[] intArray = IntStream.of(1, 2, 3).toArray();

3.Retrieving a List from a java.util.stream.Stream in Java 8
怎么把一个Stream转换成List?下面是我的尝试:

List sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List targetLongList = new ArrayList<>();
sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);

【答案】

targetLongList = sourceLongList.stream()
        .filter(l -> l > 100)
        .collect(Collectors.toList());

这一篇的目的主要以学习前面推荐的几篇文章为主,和介绍了几个简单的问题,接下来在第二篇会介绍更多有兴趣的问答。

【更新】更多请参阅:Abacus-util.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70179.html

相关文章

  • java

    摘要:多线程编程这篇文章分析了多线程的优缺点,如何创建多线程,分享了线程安全和线程通信线程池等等一些知识。 中间件技术入门教程 中间件技术入门教程,本博客介绍了 ESB、MQ、JMS 的一些知识... SpringBoot 多数据源 SpringBoot 使用主从数据源 简易的后台管理权限设计 从零开始搭建自己权限管理框架 Docker 多步构建更小的 Java 镜像 Docker Jav...

    honhon 评论0 收藏0
  • Java 8 Stream实战

    摘要:在这片文章里,主要介绍怎么用的开源框架来解答上一些经常被问到关于的问题用用用用用用用用 在这片文章里,主要介绍怎么用Java 8 Stream的开源框架 StreamEx来解答StackOverflow上一些经常被问到关于Java 8 Stream的问题: Convert Java 8 List into Map 用JDK Stream API: Map result = ch...

    leoperfect 评论0 收藏0
  • [直播视频] 《Java 微服务实践 - Spring Boot 系列》限时折扣

    摘要:作为微服务的基础设施之一,背靠强大的生态社区,支撑技术体系。微服务实践为系列讲座,专题直播节,时长高达小时,包括目前最流行技术,深入源码分析,授人以渔的方式,帮助初学者深入浅出地掌握,为高阶从业人员抛砖引玉。 简介 目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据,Java平台已成为全栈的生态体系,...

    Enlightenment 评论0 收藏0
  • 前端资源收集整理

    摘要:工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 Github版本:Front-End Resource Collection 前端相关资源汇总 学习指导 精华文章 Web前端的路该怎么走?:文章超长,但是干货超级多,值得反复精读! 听说2017你想写前端?:适合于已经度过了小白阶...

    awesome23 评论0 收藏0

发表评论

0条评论

z2xy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<