簡體   English   中英

將對象添加到ArrayLists的ArrayList

[英]Adding an object to an ArrayList of ArrayLists

我有一個ArrayList的ArrayLists,它包含MusicTrack對象。 我希望字母表中的每個字母都有一個數組列表,然后在那些字母中保存以該字母開頭的所有曲目。 我很難將MusicTrack對象添加到這些內部ArrayLists中。

例如:titles [0]保存所有以A開頭的曲目,依此類推,通過標題[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))));

如果您希望按鍵對地圖進行排序,可以使用TreeMap

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

最后,如果您確實需要使用嵌套列表,還可以使用Map.values()再次轉換地圖:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM