What you are doing may be the simplest way, provided your stream stays sequential—otherwise you will have to put a call to sequential() before forEach.
The reason the call to sequential() is necessary is that the code as it stands (forEach(targetLongList::add)) would be racy if the stream was parallel. Even then, it will not achieve the effect intended, as forEach is explicitly nondeterministic—even in a sequential stream the order of element processing is not guaranteed. You would have to use forEachOrdered to ensure correct ordering. The intention of the Stream API designers is that you will use collector in this situation, as below:
targetLongList = sourceLongList.stream()
.filter(l -> l > 100)
.collect(Collectors.toList());
Answer from Maurice Naftalin on Stack OverflowVideos
What you are doing may be the simplest way, provided your stream stays sequential—otherwise you will have to put a call to sequential() before forEach.
The reason the call to sequential() is necessary is that the code as it stands (forEach(targetLongList::add)) would be racy if the stream was parallel. Even then, it will not achieve the effect intended, as forEach is explicitly nondeterministic—even in a sequential stream the order of element processing is not guaranteed. You would have to use forEachOrdered to ensure correct ordering. The intention of the Stream API designers is that you will use collector in this situation, as below:
targetLongList = sourceLongList.stream()
.filter(l -> l > 100)
.collect(Collectors.toList());
One approach is to use Collectors.toList to collect the stream into a list:
targetLongList =
sourceLongList.stream().
filter(l -> l > 100).
collect(Collectors.toList());
If a specific List implementation is desired, Collectors.toCollection can be used instead:
targetLongList =
sourceLongList.stream().
filter(l -> l > 100).
collect(Collectors.toCollection(ArrayList::new));
Assuming Person and User are types, rather than specific objects, you can do something like this.
return list.stream()
.filter(o -> !(o instanceof Person) && !(o instanceof User))
.findAny()
.isPresent() ? list : null;
Alternative to Paul's answer (with the if-else in your question)
if (arrayList.stream().allMatch(o -> o instanceof Person || o instanceof User)) {
return null;
} else {
return arrayList;
}