Rob*_*uch 4 java findfirst java-stream option-type
给定一个简单的字符串列表:
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
Run Code Online (Sandbox Code Playgroud)
我想用一种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();
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 aStream或类似的东西来处理这种情况?
这是一个例子,可以帮助您更好地理解我的问题背后的动机。
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
public String someMethod(String s) {
return s.toUpperCase();
}
public String anotherMethod(String s) {
return s.toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
最终结果为a List<String>,其中包含以下元素,即仅将第一个元素转换为大写,其他元素全部转换为小写。
"MARY", "james", "jim", "camilla"
findFirst将流折叠为 an Optional<String>,并且没有任何内容可以恢复。
Optional<String> mary = Stream.of("Mary", "James", "Jim", "Camilla").findFirst();
Run Code Online (Sandbox Code Playgroud)
您想将流减少到只有一个元素吗?那么该方法可能就是您正在寻找的方法,然后将其与元素limit(1)所在的副本连接起来。skip(1)
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
List<String> result = Stream.concat(
strings.stream()
.limit(1)
.map(this::someMethod),
strings.stream()
.skip(1))
.map(this::anotherMethod)
).toList();
Run Code Online (Sandbox Code Playgroud)
您不想toLowerCase()在应用后应用到第一个元素toUpperCase()。
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |