我还有下一堂课。
public class Track{
private int id;
private String trackName;
private String artistName;
private String albumName;
private int amountMembers;
private int duration; //segs
private String category;
private int albumYear;
private boolean isSolist; //1 yes, 0 no
}
我的列表中有很多
Track
,我想按两个要求过滤曲目:
第一个很简单,我目前在列表中按“摇滚”类别过滤了曲目,但我无法想象如何执行一个功能来过滤并返回专辑中少于 9 首歌曲的曲目。有什么解决办法吗?我正在使用 Java,我可以使用 Streams 还是 Lambdas?重要提示:我的数据库中有一个简单的曲目列表。
您可以将 lambda 与您的逻辑结合使用
Predicate<Track> isTrackRock = t -> "rock".equals(t.getCategory());
Predicate<Track> hasAlbumLessThan9Traks = t -> t... // get all album with count of tracks
var listOftrack = new ArrayList<Track>();
var newList = listOftrack
.stream()
.filter(isTrackRock)
.filter(hasAlbumLessThan9Traks)
.collect(Collectors.toList());
我建议您已经从数据库中过滤以获得更好的性能
尚未正确测试,但你可以尝试这个:
listOfTracks.stream()
.filter(track -> "rock".equals(track.getCategory()))
.filter(track -> listOfTracks.stream()
.collect(Collectors.groupingBy(Track::getAlbumName, Collectors.counting())).get(track.getAlbumName()) < 9L)
.collect(Collectors.toList());
如果它有效并且正是您所需要的,您可以尝试为 listOfTracks.stream().collect(Collectors.groupingBy(Track::getCategory, Collectors.counting())) 添加一个变量