You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何过滤所属专辑曲目少于9首的摇滚类Track实例

解决方案

完全可以通过Java Stream实现,核心逻辑是先统计所有专辑的总曲目数,再基于统计结果做二次过滤即可,具体实现如下:

前置准备

首先为Track类的私有属性添加对应的Getter方法,示例需要用到getCategory()、getAlbumName()两个方法,请提前实现。

实现方式1(推荐,逻辑清晰易维护)

分两步操作,先统计全量专辑的曲目总数,再做条件过滤:

  1. 统计所有专辑对应的总曲目数,生成映射Map:
// allTracks为你数据库查询得到的原始扁平化Track列表
Map<String, Long> albumTrackCountMap = allTracks.stream()
        .collect(Collectors.groupingBy(Track::getAlbumName, Collectors.counting()));
  1. 按两个条件筛选符合要求的Track:
List<Track> result = allTracks.stream()
        // 筛选category为rock的曲目
        .filter(track -> "rock".equals(track.getCategory()))
        // 筛选所属专辑总曲目数小于9的曲目
        .filter(track -> albumTrackCountMap.getOrDefault(track.getAlbumName(), 0L) < 9)
        .collect(Collectors.toList());

注意:如果你已经提前完成了category为rock的筛选,统计专辑总数时必须使用原始的全量Track列表,不能使用筛选后的rock列表,否则统计的是专辑内摇滚曲目的数量,不是专辑总曲目数,会不符合需求。

实现方式2(单Stream链式写法)

也可以通过一次Stream链式操作完成,先按专辑分组过滤再扁平化结果:

List<Track> result = allTracks.stream()
        // 按专辑名分组
        .collect(Collectors.groupingBy(Track::getAlbumName))
        .entrySet().stream()
        // 过滤总曲目数小于9的专辑
        .filter(albumEntry -> albumEntry.getValue().size() < 9)
        // 取出符合条件专辑的所有曲目
        .flatMap(albumEntry -> albumEntry.getValue().stream())
        // 筛选category为rock的曲目
        .filter(track -> "rock".equals(track.getCategory()))
        .collect(Collectors.toList());

内容的提问来源于stack exchange,提问作者Julian Gimenez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:45:04