2012-07-19 65 views
1

嘗試篩選一個ArrayList從另一個工作不嘗試從另一個工作不

過濾一個ArrayList我有此ArrayList稱爲listaGrande(西班牙語爲bigList)。它包含一個名爲Objeto的類,它有一個名爲loTengo(iHaveIt)的字符串。

如果loTengo =「是」或「是」,並且只有那些標記爲Objeto的詞應該組成一個名爲inventario(inventory)的新ArrayList。

下面是類,與衝突性方法:

public class FiltraListas { // ListsFilter. 

    public String registro; // registry. 
    public ArrayList<Objeto> listaGrande; 
    public ArrayList<Objeto> inventario; // CONFLICTIVE by being declared here? 
    public String loTengo; 
    public Objeto unObjeto; // oneObject 

    public FiltraListas(String registro) { 
     this.registro = registro; 
     listaGrande = new ArrayList<Objeto>(); 
     this.loTengo = "Yes"; 

    } 

    public ArrayList<Objeto> setInventario() { 
     for (Objeto cualquiera : listaGrande){ // cualquiera is Spanish for any. 
      if("YES".equalsIgnoreCase(cualquiera.getLoTengo())) { // FILTER NOT WORKING. 
       inventario.add(cualquiera); 
      } 
     } 
     return inventario; 

    } 

類的其餘部分具有getInventario,通過Eclipse將自動生成的getter和setter,並且添加/刪除用於listaGrande方法。

這裏是JUnitTestCase。

public class FiltraListasTest extends TestCase { 

    private FiltraListas checador; 
    private Objeto n1; 
    private Objeto n2; 

    public void testFiltraListas() { 
     FiltraListas checa = new FiltraListas("Arranque"); 
     assertEquals("Arranque", checa.registro); 
     assertTrue(checa.listaGrande instanceof ArrayList); 
     assertTrue(checa.inventario instanceof ArrayList); // Smooth. 

    } 
     public void setup() { 
     checador = new FiltraListas("Probador"); // Tester. 
     checador.addToListaGrande(n1); // Two Objeto on 
     checador.addToListaGrande(n2); // right list. 
     n1 = new Objeto("Pinzas eléctricas"); 
     n2 = new Objeto("Multímetro"); 
     n1.setLoTengo("yes"); // CONFLICTIVE. Should make setInventario to work. 
     n2.setLoTengo("Pronto lo compraré"); // I'll buy it soon. 

    } 

    public void testListaGrande() { 
     setup(); 
     ArrayList<Objeto> todasCosas = checador.getListaGrande(); 
     ArrayList<Objeto> pruebaInventario = checador.getInventario(); 
     assertEquals(2, todasCosas.size()); 
     assertEquals(1, pruebaInventario.size()); // Probes to be wrong. 

    } 
} 

這是我執行丹的建議。我認爲應該工作。但事實並非如此。任何想法解決它?

謝謝。

+0

謝謝,ThiefMaster和Flexo。 – Dieglock 2012-07-26 17:02:45

回答

2

你的意思是下面的事?:

List<Dice> myInventory = new ArrayList<Dice>(); 
for (Dice die : bigList) { 
    if ("YES".equalsIgnoreCase(die.getHaveIt())) { 
     myInventory.add(die); 
    } 
} 
return myInventory; 

希望這是你在找什麼。

+0

丹,你好。我一直試圖在我的程序上實現你的代碼。還有一些我做得不好的事情。是否有可能檢查我寫的內容?我會把一些代碼回答這個問題。謝謝。 – Dieglock 2012-07-25 18:47:44

+0

當然。請更新什麼不起作用。 – 2012-07-25 19:39:40

0

這是你在找什麼?

public class Dice { 

    private static ArrayList<String> myInventory; 
    private static String haveIt; 

    public void setMyInventory() { 
     if (haveIt.equals("Yes") || haveIt.equals("yes")) 
      myInventory = new ArrayList<String>(); 
     else 
      myInventory = null; 
    } 

} 
+0

謝謝,傑克。我在Eclipse上試用了你的解決方案。我相信它會創建一個ArrayList,但是,它會自動添加和刪除它們還是需要其他方法?我無法讓它工作。再次感謝。 – Dieglock 2012-07-25 18:43:20

+0

如果我正確理解你,要添加到/從ArrayList中刪除,你只需要這樣做:'myInventory.add(String); myInventory.remove(indexOf(String));' – jrad 2012-07-25 20:06:04

1

如果使用Apache Commons Collections中是一個選擇,可以考慮使用filterselect方法,根據您的需要。

+0

再次。感謝你們三位抽出時間回答。對不起,我花了很長時間迴應。在衆多信息中嶄露頭角並不容易。安德魯,我仍然不熟悉Apache Commons,試圖找到答案,我在YouTube找到了新波士頓。我一直在那裏學習。它是Apache Commons的東西,你通常使用Java程序和Android應用程序?再次感謝。 – Dieglock 2012-07-25 18:41:23

+0

我不瞭解Android應用程序,但在普通的Java中使用Apache Commons庫(特別是commons-lang)並不罕見(得到它?)。 – 2012-07-26 01:39:28

+0

我發現它的一些信息。 Google和Android的Apache Commons現在在Guava下。我會繼續搜索。 – Dieglock 2012-07-28 10:02:03