如何使用Java 8流快速替换列表中的元素
假设您有一个项目清单:
List<String> books = Arrays.asList(
"The Holy Cow: The Bovine Testament",
"True Hip Hop",
"Truth and Existence",
"The Big Book of Green Design"
);
(不要判断我。此随机书生成器中的书 )
现在,您想创建一个新列表,其中仅将第三项替换为一些新值:
List<String> books = Arrays.asList(
"The Holy Cow: The Bovine Testament",
"True Hip Hop",
"Pregnancy For Dummies", // New book at index 2
"The Big Book of Green Design"
);
当然,您可以去修改原始列表:
books.set(2, "Pregnancy For Dummies");
…或创建原始列表的副本,然后修改该副本:
List<String> copy = new ArrayList<>(books);
copy.set(2, "Pregnancy For Dummies");
但是,如果您想编写单行代码以按功能样式执行相同的操作,则可以使用jOOλ编写以下内容
seq(books)
.zipWithIndex()
.map(t -> t.v2 == 2
? "Pregnancy For Dummies"
: t.v1)
.toList();
使用JDK标准Streams API,事情会变得有些困难。 您可以这样写:
Stream.concat(
Stream.concat(
books.stream().limit(2),
Stream.of("Pregnancy For Dummies")
),
books.stream.skip(3)
).collect(Collectors.toList());
不过,这有点不幸,因为流的第一部分需要遍历两次-一次是限制,一次是跳过( 另请参见我们有关SQL的OFFSET分页的警告 )
迅捷还是不?
显然,如上所述,JDK API不会帮助您编写简洁的功能逻辑,并且“命令式”样式更加简单明了。 我们之前已经写过有关此内容的文章 。 这也是我们创建jOOλ的主要动机。
如果您正在寻找功能更多的幸福,也请查看以下库:
- Java语言
- 功能性Java
翻译自: https://www.javacodegeeks.com/2015/04/how-to-use-java-8-streams-to-swiftly-replace-elements-in-a-list.html
原文作者:dnc8371
原文地址: https://blog.csdn.net/dnc8371/article/details/106703630
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/dnc8371/article/details/106703630
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章