如何按专辑中的曲目数量过滤此歌曲
Posted
技术标签:
【中文标题】如何按专辑中的曲目数量过滤此歌曲【英文标题】:How to filter this songs by amount tracks in an Album 【发布时间】:2021-10-15 12:52:06 【问题描述】:我有下一堂课。
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?重要提示:我的数据库中有一个完整的曲目列表。
【问题讨论】:
提示:您的要求提到了曲目和专辑。所以问题是:相册的数据模型是什么样的?或者您只是有一个“数据库”中所有曲目的平面列表?换句话说:也许您应该退后一步,重新设计您的模型,并以专辑为基础?就像例子一样。无论如何,我们可能无法帮助您,因为如前所述:我们不了解所有相关方面。请与我们分享! 嗨!我有你提到的所有曲目的平面列表。 那我强烈建议你至少引入一个 Album 类。因为当您需要订购/比较东西时,您真的希望能够说this.album.equals(that.album)
。因为否则,您将进入比较多个字段(如专辑名称、年份等)的业务……如果您想真实的话。当然,这取决于你想去的现实程度。但是想一想:同一年的“同一张”专辑可能有 2、3 个版本也不是太不现实。
我会试试的,谢谢你的时间!
【参考方案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());
我建议你已经从 db 中过滤以获得更好的性能
【讨论】:
嗯,谢谢,我该如何过滤?我正在使用 mysql 你用什么从数据库中获取数据? hibernate, jdbdTemplate, Spring-data with repositoriy, 在纯 java 上自定义手动选择和连接? 休眠并使用 CrudRepository 从表中获取内容 这将帮助您在 CrudRepositoryCrudRepository
和 @Query
baeldung.com/spring-data-jpa-query 上声明您的方法
谢谢,我会看的!【参考方案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())) 添加一个变量
【讨论】:
以上是关于如何按专辑中的曲目数量过滤此歌曲的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spotify 上播放专辑中的曲目,以便之后使用 Spotify App Remote SDK for Android 播放专辑的下一首曲目?