java替换数组中的元素_如何使用Java 8流快速替换列表中的元素

java替换数组中的元素

这篇文章最初发表在jooq.org上 ,这是一个博客,从jOOQ的角度着眼于所有开源,Java和软件开发

假设您有一个项目清单:

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());

这将是一个有点可惜,不过,作为流的第一部分将需要经过两次-一次为限,一次用于跳跃(另见我们约OFFSET分页SQL中的注意事项)。

迅捷还是不?

显然,如上所示,JDK API不会帮助您编写简洁的功能逻辑,并且“命令式”样式更加简单明了。 我们之前已经写过 。 这也是我们创建jOOλ的主要动机。

如果您正在寻找功能更多的幸福,也请查看以下库:

翻译自: https://jaxenter.com/how-to-use-java-8-streams-to-swiftly-replace-elements-in-a-list-116217.html

java替换数组中的元素

    原文作者:diluan6799
    原文地址: https://blog.csdn.net/diluan6799/article/details/106832484
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞