java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流

这篇具有很好参考价值的文章主要介绍了java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5.5 付诸实践

代码清单5-1 找出2011年的所有交易并按交易额排序(从低到高)

 List<Transaction> tr2011 =
    transactions.stream()
                .filter(transaction -> transaction.getYear() == 2011)    ←─给filter传递一个谓词来选择2011年的交易
                .sorted(comparing(Transaction::getValue))    ←─按照交易额进行排序
                .collect(toList());    ←─将生成的Stream中的所有元素收集到一个List

代码清单5-2 交易员都在哪些不同的城市工作过

 List<String> cities =
    transactions.stream()
                .map(transaction -> transaction.getTrader().getCity())    ←─提取与交易相关的每位交易员的所在城市
                .distinct()    ←─只选择互不相同的城市
                .collect(toList());

Set<String> cities =
    transactions.stream()
                .map(transaction -> transaction.getTrader().getCity())
                .collect(toSet());

代码清单5-3 查找所有来自于剑桥的交易员,并按姓名排序

 List<Trader> traders =
    transactions.stream()
                .map(Transaction::getTrader)    ←─从交易中提取所有交易员
                .filter(trader -> trader.getCity().equals("Cambridge"))    ←─仅选择位于剑桥的交易员
                .distinct()    ←─确保没有任何重复
                .sorted(comparing(Trader::getName))    ←─对生成的交易员流按照姓名进行排序
                .collect(toList());

代码清单5-4 返回所有交易员的姓名字符串,按字母顺序排序

String traderStr =
    transactions.stream()
                .map(transaction -> transaction.getTrader().getName())    ←─提取所有交易员姓名,生成一个Strings构成的Stream
                .distinct()    ←─只选择不相同的姓名
                .sorted()    ←─对姓名按字母顺序排序
                .reduce("", (n1, n2) -> n1 + n2);    ←─逐个拼接每个名字,得到一个将所有名字连接起来的String

以上解决方案效率不高(所有字符串都被反复连接,每次迭代的时候都要建立一个新的String对象)。

String traderStr =
    transactions.stream()
                .map(transaction -> transaction.getTrader().getName())
                .distinct()
                .sorted()
                .collect(joining()); ←─使用joining(其内部会用到StringBuilder

代码清单5-5 有没有交易员是在米兰工作的

boolean milanBased =
    transactions.stream()
                .anyMatch(transaction -> transaction.getTrader().getCity().equals("Milan"));    ←─把一个谓词传递给anyMatch,检查是否有交易员在米兰工作

代码清单5-6 打印生活在剑桥的交易员的所有交易额

transactions.stream()
            .filter(t -> "Cambridge".equals(t.getTrader().getCity()))    ←─选择住在剑桥的交易员所进行的交易
            .map(Transaction::getValue)     ←─提取这些交易的交易额
            .forEach(System.out::println);    ←─打印每个值

代码清单5-7 所有交易中,最高的交易额是多少

Optional<Integer> highestValue =
    transactions.stream()
                .map(Transaction::getValue)    ←─提取每项交易的交易额
                .reduce(Integer::max);    ←─计算生成的流中的最大值

Optional<Transaction> smallestTransaction =
    transactions.stream()
                .max(comparing(Transaction::getValue));

代码清单5-8 找到交易额最小的交易

Optional<Transaction> smallestTransaction =
    transactions.stream()
                .reduce((t1, t2) -> t1.getValue() < t2.getValue() ? t1 : t2);    ←─通过反复比较每个交易的交易额,找出最小的交易

Optional<Transaction> smallestTransaction =
    transactions.stream()
                .min(comparing(Transaction::getValue));

代码清单5-9  Map构造Model

# 素材
Map<String, List<Person>> map = new HashMap<>();

# 结果
List<Person> res = new ArrayList<>();

# 构造Model
map.forEach((className, persons) -> {
    if (persons != null && persons.size() > 0) {
        persons.forEach(person -> {
            Person per = new Person();
            per.setClassName(className);
            per.setAge(person.getAge());
            per.setNumber(person.getNumber());
            res.add(per);
        });
    }
});

代码清单5-10 展平嵌套数组

[实践总结] java8 展平嵌套数组

代码清单5-11 列表根据元素属性去重

[实践总结] java8 列表根据元素属性去重

代码清单5-12 String,int[],Integer[],List<Integer>互转

[实践总结] String,int[],Integer[],List<Integer>互转

代码清单5-13 String,String[],List<String>互转

[实践总结] String,String[],List<String>互转

代码清单5-14 String,int,Integer互转

[实践总结] String,int,Integer互转

5.6 数值流

Further Reading : java8 数值流介绍

5.7 构建流

Further Reading : java8 构建流的5种方法

-----------------------------------------------------------------------------读书笔记摘自 书名:Java 8实战 作者:[英] Raoul-Gabriel Urma [意] Mario Fusco [英] Alan M文章来源地址https://www.toymoban.com/news/detail-603662.html

到了这里,关于java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Java8实战》第11章 用 Optional 取代 null

    11.1 如何为缺失的值建模 上面的这种代码就很容易出现NullPointerException的异常。 11.1.1 采用防御式检查减少 NullPointerException 为了避免NullPointerException异常,一般就会加很多判断。 这种每次引用一次变量都做一次null的检查。 11.1.2 null 带来的种种问题 它是错误之源。 NullPointerE

    2023年04月19日
    浏览(38)
  • 《Java8实战》第8章 Collection API 的增强功能

    8.1 集合工厂 如果我想创建一个集合,之前的做法是先new一个list,然后再一个个的add,这样子有点繁琐。 现在的方法可以这样,是使用 Arrays.asList()工厂方法: ListString friends = Arrays.asList(\\\"Raphael\\\", \\\"Olivia\\\", \\\"Thibaut\\\"); 但是这样子创建只能更新,不可以增加、删除。 8.1.1 List 工厂 工

    2023年04月24日
    浏览(34)
  • 安装Java8和Java17共存,如何自由切换Java版本?

    官方下载地址:https://www.oracle.com/java/technologies/downloads/ 根据需要选择要下载的Java版本 安装过程省略,有需要的可自行百度 … 找到自己java安装的目录 进入Java jdk的bin目录,如:C:java8jdk1.8.0_331bin,将java.exe改为java8.exe 同样的方式去修改java17的java文件名称 将Java8和Java17的b

    2024年02月09日
    浏览(57)
  • 设计模式、Java8新特性实战 - List<T> 抽象统计组件

    在日常写代码的过程中,针对List集合,统计里面的某个属性,是经常的事情,针对List的某个属性的统计,我们目前大部分时候的代码都是这样写,每统计一个变量,就要定义一个值,且要在for循环增加一行累计的代码,比较繁琐,而且代码写出来不够优雅。 利用顶层抽象的

    2024年02月14日
    浏览(35)
  • java8-使用流-2

    筛选各异的元素 流还支持一个叫作aistinct的方法,它会返回一个元素各异(根据流所生成元素的hashcode和eguals方法实现)的流。例如,以下代码会筛选出列表中所有的偶数,并确保没有重复。图5-2直观地显示了这个过程。 5.1.3截短流 流支持Limit(n)方法,该方法会返回一个不超过给

    2024年02月20日
    浏览(46)
  • Java8 List集合如何指定打印分隔符

    背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: 执行结果如下: 如果我们想在打印的时候不打印 [] ,然后将分隔符换成 、 顿号,应该怎么操作呢? 其实有两种方法可以实现: 方法一:String.join(推荐) String

    2024年02月10日
    浏览(56)
  • JAVA-- 在Java8 Parallel Stream中如何自定义线程池?

    使用Parallel Stream时,在适当的环境中,通过适当地使用并行度级别,可以在某些情况下获得性能提升。 如果程序创建一个自定义ThreadPool,必须记住调用它的shutdown()方法来避免内存泄漏。 如下代码示例,Parallel Stream并行处理使用的线程池是ForkJoinPool.commonPool(),这个线程池是

    2024年02月09日
    浏览(43)
  • Java8的新特性以及使用

    1.   通 过 1 0 个示 例 来 初 步认 识 J a v a 8 中 的 l a m bd a 表达 式   我个 人 对 J a v a   8 发 布 非 常 激动 , 尤 其 是 l a m b d a 表 达式 和 流 AP I 。 越 来 越 多 的 了解 它 们 , 我 能 写 出 更 干 净 的代 码 。 虽然 一 开 始 并 不 是 这 样 。 第一 次 看 到 用 la m b d a 表

    2024年02月07日
    浏览(50)
  • Java8 lambda 表达式 forEach 如何提前终止?

    首先,让我们看一下Java 8中如何使用forEach()方法。forEach()方法接受一个Consumer接口作为参数,该接口定义了一个accept()方法,该方法接受一个对象并对其执行一些操作。因此,我们可以通过Lambda表达式来实现Consumer接口。下面是一个使用Lambda表达式的forEach()方法的示例: 在上面

    2024年02月12日
    浏览(45)
  • 使用Dockerfile创建java8的容器

    Dockerfile是根据一系列的命令和参数,去创建一个新的容器的方式。 常用的命令如下 命令  含义 FROM image_name:tag 定义一个基础镜像,在这个镜像之上,进行自定义 MAINTAINER user_name         镜像创建人 ENV key value 设置环境变量,可以设置多条 RUN command  执行命令,可以写多

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包