gpt4 book ai didi

java - 将对象添加到 ArrayList 的 ArrayList

转载 作者:行者123 更新时间:2023-12-02 05:30:42 25 4
gpt4 key购买 nike

我有一个包含 MusicTrack 对象的 ArrayList 的 ArrayList。我想要为字母表中的每个字母创建一个数组列表,然后在其中保存以该字母开头的所有轨道。我在将 MusicTrack 对象添加到这些内部 ArrayList 时遇到了麻烦。

例如:titles[0] 保存所有以 A 开头的轨道,依此类推,直到titles[26] 保存Z 轨道。 MusicTrack 对象有一个名为 getTitle() 的 getter 方法,用于返回标题字符串进行比较。

import java.util.ArrayList;

public class TitleBucket implements BucketInterface{
private ArrayList<ArrayList<MusicTrack>> titles;

public TitleBucket(){
this.titles = new ArrayList<ArrayList<MusicTrack>>(26);
for (int i=0; i<26; i++){
titles.add(new ArrayList<MusicTrack>());
}
}

public void addItem(MusicTrack itemToAdd){
int comp = Character.toUpperCase(itemToAdd.getTitle().charAt(0)) - 'A';
// Unsure where to go from here. The above line
// gets the index of the outer ArrayList but I
// don't know how to add it to that ArrayList only
}
}

当我使用 for 循环时,它会将每个轨道添加到每个数组列表中,所以我知道这是不正确的,但我不知道什么是正确的方法。

最佳答案

我建议使用Map而不是嵌套列表。您可以使用 Java Streams 来实现这一点:

Map<Character, List<MusicTrack>> titles = tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0))));

如果您希望 map 按键排序,您可以使用 TreeMap 来实现:

Map<Character, List<MusicTrack>> titles = tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0)), TreeMap::new, Collectors.toList()));

最后,如果您确实需要使用嵌套列表,您还可以使用 Map.values() 再次转换 map :

List<List<MusicTrack>> titles = new ArrayList<>(tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0)), TreeMap::new, Collectors.toList()))
.values());

关于java - 将对象添加到 ArrayList 的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56203467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com