gpt4 book ai didi

java - 有没有一种方法可以使用 Java Streams 从字符串的 ArrayList 中过滤符合条件的子字符串?

转载 作者:行者123 更新时间:2023-12-05 09:28:15 25 4
gpt4 key购买 nike

有没有办法使用 Java Streams 实现这一点?

List<String> list = new ArrayList<>();
list.add("x=aa,y=bb,y=cc");
list.add("y=dd,z=ee,w=ff");
list.add("w=gg,w=hh,w=ii");

并且我想在 ArrayList 上方进行过滤以仅包含“y”类型的字符串值。如下图

list=["bb","cc","dd"]

我能够使用多行代码使用 String.split(",") 并将符合条件的子字符串插入新的 ArrayList 来实现此目的。但是有没有一种使用 Java Streams 来实现这一目标的简洁方法?

最佳答案

你问:

is there a clean way to achieve this using Java Streams?

是的。事实上,您可以处理您的输入,过滤掉不需要的部分,并生成一个完成的列表,所有这些都使用流。

首先定义一些示例数据,一个list of输入。

生成 stream从那个名单。根据我们的示例数据,该流有 3 个元素。

调用Stream#flatMap返回一个新流,其元素由原始流的元素组成。新流有 9 个元素,通过将 3 个原始元素中的每一个元素分成 3 个部分 (3 * 3 = 9) 而生成。

Filter文本以我们的目标 y= 前缀开头的元素的较新的较长流。

转换每个通过过滤器 predicate 的字符串元素测试。使用简单的字符串操作来 replace “y=”为空字符串。所以像 y=bb 这样的值变成了 bb

通过收集到新的 List 来收集转换后的字符串对象。

List < String > inputs =
List.of(
"x=aa,y=bb,y=cc" ,
"y=dd,z=ee,w=ff" ,
"w=gg,w=hh,w=ii"
);
List < String > results =
inputs
.stream() // Generate stream whose elements are each of the list’s elements.
.flatMap( input -> Arrays.stream( input.split( "," ) ) ) // Break each element into parts, feeding each part into a new longer stream.
.filter( pairing -> pairing.startsWith( "y=" ) ) // Filter out any strings not beginning with `y=`.
.map( pairing -> pairing.replace( "y=" , "" ) ) // A value such as `y=bb` becomes `bb`.
.toList(); // Collect transformed strings into a new list.

运行时。

results.toString() = [bb, cc, dd]

要按排序顺序排列结果,请在 toList() 之前添加对 .sorted() 的调用。

关于java - 有没有一种方法可以使用 Java Streams 从字符串的 ArrayList 中过滤符合条件的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71561300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com