有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何按专辑中曲目的数量过滤这些歌曲

我有下一节课

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首曲目的专辑

首先,这很简单,我目前有一个列表中的曲目按类别“rock”过滤,但我无法想象我如何能做一个功能,过滤并返回专辑中少于9首歌曲的曲目。有解决办法吗?我在使用Java,我可以使用Streams或Lambdas?。重要提示:我的数据库中有一个简单的曲目列表


共 (2) 个答案

  1. # 1 楼答案

    你可以在逻辑上使用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());
    
    

    我建议您已经从数据库中筛选出更好的性能

  2. # 2 楼答案

    尚未正确测试,但您可以尝试以下方法:

        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()))