2011-09-09 82 views
2

我有一個數組列表的數組,我想做一個單獨的視圖,它會過濾某些東西,並將其存儲在某處以備後用。我正在計劃使用數組列表的數組列表,並想知道數組列表是否有方法可以連接在一起,哪裏的變化反映了另一個?有什麼想法嗎 ?它就像一張excel表格,我想過濾掉某些數字,然後我將顯示同一張表格的另一個視圖,而不會真正更改原始表格。請幫忙。連接多個arraylist到一個單一的數組列表

+0

什麼你問當然可以做到,但如果你給更多的背景下,以你想要做什麼,我敢打賭,一個更好的解決方案可以被發現。任何時候你發現自己想要一個「藏品集合」,你可能需要一個更深思熟慮的方法。 – corsiKa

+0

沒關係,所以我有一張包含姓氏名字和年齡的表格。在那張表中,我有1到90歲,但我只想要8歲以下的人,所以這個新的「觀點」必須反映這一點。 – Ashley

+0

你能舉一些文字的例子嗎? –

回答

0

根據你對問題的解釋,你可以保留一個排序列表..然後做一個子集(探索導航集,看看它是如何實現的)..將你的子集包裝成一個不可修改的列表或一個新的列表,每當你暴露它。 如果您希望遇到重複項,您還可以使用排序/可導航地圖..因此,地圖中的值可以是重複項的數量。現在,當您查詢此地圖的頭部或尾部以返回視圖時,您可以使用重複數量來獲得所需的列表。

NavigableSet<Integer> orderedSet = new ConcurrentSkipListSet<Integer>(Arrays.asList(new Integer[] {11, 20, 32, 14, 
      5})); // or tree set if thread safety is not a concern. 
    orderedSet.headSet(20); // will give you integers upto 20 i.e. [5, 11, 14] 
+0

列表 sub = list.subList(1,4);類似的東西? – Ashley

+0

是的,但這裏1和4只是索引,所以除非列表按年齡排序,否則不起作用。你也應該根據你的用例來看看返回列表的行爲;如果將它公開給用戶,如果說用戶向其中添加了一些數據,您希望它的行爲如何。如果您只想公開只讀視圖,請將其包裝到不可修改的列表中。 – Scorpion

+0

我不明白你說什麼對不起。 – Ashley

1

這是一個完整的,可執行的演示給你。你應該能夠編譯並按原樣運行。我沒有添加評論或錯誤檢查,但它應該做你所要求的。我不知道列表清單是否適合您當前的情況。事實上,您的行同時具有名稱和年齡,這讓我認爲您不需要列表列表,而是需要特定類的行對象列表。 (或者,您可以在任何地方使用List<?>List<Object> ....)

儘管如此,您可能會對以下內容感興趣。您可能可以使用它,或者它可能會讓您遠離列表清單方法。 :)

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

/** 
* A ragged 2-D table of strings that supports "views" (arbitrary rows). 
* 
* WARNING: no error checking. This is just a sketch. 
*/ 
public class Table { 

    private List<List<String>> data; 
    private List<Integer> activeRows = new ArrayList<Integer>(); 

    public Table(List<List<String>> data) { 
     this.data = data; 
    } 

    public void setActiveRows(List<Integer> activeRows) { 
     this.activeRows = activeRows; 
    } 

    public void update(int row, int column, String value) { 
     data.get(row).set(column, value); 
    } 

    public void show() { 
     for (Integer row: activeRows) { 
      System.out.println(data.get(row)); 
     } 
    } 

    /** 
    * DEMO. Normally we don't put main methods inside a class. This is just a sketch. 
    */ 
    public static void main(String[] args) { 
     List<List<String>> a = Arrays.asList(
      Arrays.asList("abc", "def", "ghi"), 
      Arrays.asList("ABC", "DEF", "GHI"), 
      Arrays.asList("zzz", "yyy", "xxx"), 
      Arrays.asList("dog", "cat", "rat") 
     ); 

     // Make two tables that share the same data 
     Table t1 = new Table(a); 
     Table t2 = new Table(a); 

     // t1 will have all four rows; t2 just two of them. 
     t1.setActiveRows(Arrays.asList(0, 1, 2, 3)); 
     t2.setActiveRows(Arrays.asList(1, 3)); 

     // Show them 
     t1.show(); 
     System.out.println(); 
     t2.show(); 
     System.out.println(); 

     // Now change part of t1 and show that this is reflected in t2. 
     t1.update(1, 2, "NEWVALUE"); 

     // And show them again 
     t1.show(); 
     System.out.println(); 
     t2.show(); 
     System.out.println(); 
    } 
} 

輸出是:

[abc, def, ghi] 
[ABC, DEF, GHI] 
[zzz, yyy, xxx] 
[dog, cat, rat] 

[ABC, DEF, GHI] 
[dog, cat, rat] 

[abc, def, ghi] 
[ABC, DEF, NEWVALUE] 
[zzz, yyy, xxx] 
[dog, cat, rat] 

[ABC, DEF, NEWVALUE] 
[dog, cat, rat] 
相關問題