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种方法文章来源:https://www.toymoban.com/news/detail-603662.html
-----------------------------------------------------------------------------读书笔记摘自 书名:Java 8实战 作者:[英] Raoul-Gabriel Urma [意] Mario Fusco [英] Alan M文章来源地址https://www.toymoban.com/news/detail-603662.html
到了这里,关于java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!