我有一个对象列表,我想根据一个字段的值将这个列表分为两个列表。我就是这么做的
Stream.filter()
:
public void setMovieMedia(List<MovieMediaResponse> movieMedias) {
this.setPhotos(movieMedias
.stream()
.filter(movieMedia -> movieMedia.getType().equals(MediaType.PHOTO))
.collect(Collectors.toList()));
this.setVideos(movieMedias
.stream()
.filter(movieMedia -> movieMedia.getType().equals(MediaType.VIDEO))
.collect(Collectors.toList()));
}
但是,使用这种方法,我想我已经循环浏览了两次列表。有没有一种方法可以在不重复列表两次的情况下实现相同的事情?
我知道我可以通过使用
List.forEach()
像下面的例子一样,但我想避免使用这种方法:
List<MovieMediaResponse> movieMedias = ...;
movieMedias.forEach(m -> {
if (m.getType().equals(MediaType.PHOTO))
else if (m.getType().equals(MediaType.VIDEO))
});