Given a simple list of strings:
List<String> strings = Arrays.asList("Mary", "James", "Jim", "Camilla");
I'd like to process each item of the list with a anotherMethod()
method, however the first item shall be processed additionally by someMethod()
.
I've tried something like this:
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();
Is there a way to handle such a scenario using a Stream
or something similar?
Update 1
Here is an example to help you better understand the motivation behind my question.
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();
}
The final result shall be a List<String>
with the following elements, that is, only the first element is converted to upper-case while all other elements are converted to lower-case.
"MARY", "james", "jim", "camilla"
findFirst
collapses the stream to anOptional<String>
, and there is nothing to resume.Do you want to reduce the stream to only one element? Then the method
limit(1)
might be what you are looking for and then concat it with a copy where youskip(1)
the element.Edit: After Update 1:
You wouldn't want to apply
toLowerCase()
to the first element after you appliedtoUpperCase()
.