有没有一种使用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"]

我可以通过使用字符串的多行代码来实现这一点.拆分(",")并将符合条件的子字符串插入新的ArrayList.但是,有没有一种干净的方法可以使用Java流实现这一点?

推荐答案

你问:

有没有一种干净的方法可以使用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.

run 的时候.

后果toString()=[bb,cc,dd]

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

Java相关问答推荐

如何在Java中使用Rest模板通过查询参数发送GET请求

Java同步小服务器

让两个方法来回调用有缺点吗?

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

如何粘合(合并)文件Lucene?

无法处理批处理侦听器中的反序列化异常

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

JOOQ中的子查询使用的是默认方言,而不是配置的方言

在向WebSphere中的文档添加元素时iText挂起

如何仅使用键/ID的一部分(组合)高效地返回映射值?

将PNG转换为位图自定义十六进制字符串

在Java 15应用程序中运行Java脚本和Python代码

Java泛型类方法的静态返回类型是否被类型擦除?

何时调用密封层次 struct 的switch 中的默认情况

在缺少字段时使用Jackson With Options生成Optional.Empty()

TinyDB问题,无法解析符号';上下文&

当我try 返回可选时,Mock无法正常工作

如何在更改分辨率时将鼠标坐标计算为世界坐标

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值