你问:
有没有一种干净的方法可以使用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()
的调用.