java - 如何判断数组列表上的 for 循环是否已结束?

标签 java arraylist

我目前正在尝试构建一个播放列表函数,该函数采用音乐库并从中生成一个具有指定最短持续时间的随机播放列表。这个想法是,它需要用户的最低评级 - 但是,如果该评级的轨道不足以填充播放列表,则会选择 minimumRating - 1 的轨道。 。因此,如果您想要 60 分钟的 5 星级轨道,但没有足够的轨道,程序将尝试用 4 星级轨道来填补剩余部分。

所以我需要一种递减 minimumRating 的方法一旦它到达 for 循环的末尾,然后再次将其关闭。如果 for 循环已到达末尾,是否有一种方法可以返回某些内容(可能是 boolean 值)?

如果有帮助,可以在这里找到我当前的代码:

public ArrayList<Track> createPlaylist(int minRating, int minDuration) { minDuration = minDuration * 60; ArrayList<Track> shuffledList = trackList; ArrayList<Track> playlist = new ArrayList<Track>(); Collections.shuffle(shuffledList); int playlistDuration = 0; while (playlistDuration < minDuration) { for (Track track : shuffledList) { if (track.getRating() >= minRating) { playlist.add(track); playlistDuration += track.getLength(); } } } return playlist; }

最佳答案

你可以这样做:

public ArrayList<Track> createPlaylist(final int minRating, int minDuration) {
    minDuration = minDuration * 60;
    final ArrayList<Track> shuffledList = trackList;
    final ArrayList<Track> playlist = new ArrayList<Track>();
    Collections.shuffle(shuffledList);
    int playlistDuration = 0;
    int myMin = minRating;
    while (playlistDuration < minDuration && myMin > 0) {
        for (final Track track : shuffledList) {
            if (track.getRating() >= myMin && !playlist.contains(track)) {
                playlist.add(track);
                playlistDuration += track.getLength();
            }
        }
        myMin--;
    }
    return playlist;
}

关于java - 如何判断数组列表上的 for 循环是否已结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733246/

相关文章:

java - 如何限制用户可以调整 JavaFX 窗口大小的程度?

java - 如何在多个项目中使用外部 log4j.properties?

java - Swing - 如何模仿为什么我的外观会绘制禁用图标?

Java 数组列表 : cut off ending on each element

java 类和数组列表

java - 在运行时命名变量

java - 添加多列图例键 Mapbox JS

Java Web 服务客户端无法从 cdyne.com 访问天气服务

Java Iterables "Resetting"带有每个 Foreach 构造的迭代器

java - add(E e, Object[] elementData, int s) 方法的用途是什么?