给定一个简单的字符串列表:
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
我想用anotherMethod()
方法处理列表中的每一项,但是第一项应该由someMethod()
额外处理。
我试过这样的方法:
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
var result = strings.stream()
.findFirst()
.map(myString -> someMethod(myString))
// "resume" stream
.map(myString -> anotherMethod(myString))
.toList();
有没有办法使用Stream
或类似的东西来处理这样的场景?
3条答案
按热度按时间j8ag8udp1#
findFirst
将流压缩为Optional<String>
,并且没有要恢复的内容。是否要将流减少为只有一个元素?那么方法
limit(1)
可能就是您要查找的,然后将它与您skip(1)
元素的副本连接。chy5wohz2#
您可以在索引上创建一个
IntStream
。cgh8pdjw3#
一个月
您使用
findFirst()
的想法完全可行。我们可以对
Optional
结果应用map()
,并使用Java 9Optional.stream()
(以"恢复"流)。结合
Stream.concat()
的flatMap()
操作对于将流的第一个元素与其余部分组合将是方便的。应用最终转换并将结果收集到一个列表中。
∮ ∮ ∮
另一种选择是使用Java 8
Iterator.forEachRemaining()
: