2012-04-08 10 views
1

Ich bin mir nicht sicher, eine Lösung für das folgende Problem zu finden. Ich habe 4 verschiedene ArrayList, die ihre Werte von einer Datenbank erhalten. Sie können Größe von 0 (einschließlich) bis was überhaupt haben. Jede Liste kann auch andere Größe und Werte haben. Was ich versuche effektiv zu tun ist: Vergleichen Sie alle Nicht-0-Größenlisten und prüfen Sie, ob sie einige gemeinsame Ganzzahlen haben und was diese Werte sind.ArrayList Vergleichen und Get Shared Werte

Irgendwelche Ideen? Vielen Dank!

Antwort

6

Wenn Sie eine Sammlung von gemeinsamen ganzen Zahlen für alle brauchen, ohne leere:

List<List<Integer>> lists = ... 
Collection<Integer> common = new HashSet<Integer>(lists.get(0)); 
for (int i = 1; i < lists.size(); i++) { 
    if (!lists.get(i).isEmpty()) 
    common.retainAll(lists.get(i)); 
} 

am Ende wird die common ganze Zahlen enthalten, die gemeinsam für alle von ihnen.

+1

Funktioniert das, wenn eine der Listen leer ist? Weil, wenn es leer ist, ich immer noch wissen muss, ob es gemeinsame Werte für die restlichen Listen gibt, die das nicht sind. – Vagelism

+1

Was benötigen Sie - gemeinsame Ganzzahlen, die in allen Listen enthalten sind, oder eine Gruppe von Ganzzahlen, wobei mindestens zwei für alle gleich sind? –

+0

Nur die ganzen Zahlen, die für alle Listen, die Werte haben, üblich sind. Wenn sie keine Werte haben, müssen sie nicht verglichen werden. Wenn zum Beispiel 3 der Listen Werte haben, möchte ich wissen, ob es einen gemeinsamen Wert gibt in 3 von ihnen und was ist dieser Wert. – Vagelism

2

Sie könnten wollen CollectionUtils.intersection() Apache Commons verwenden, um die Kreuzung von zwei Sammlungen zu bekommen ...

iterativ die Kreuzung erzeugen, und wenn es nicht leer ist, wenn Sie fertig sind - Sie haben ein gemeinsames Element, und Es ist in dieser resultierenden Sammlung.

leere Listen In Bezug auf: nur überprüfen, ob seine size() 0 ist, und wenn es - diese Liste überspringen.

0

Sie können dies tun. Wenn Sie mehrere Elemente suchen müssen, legen Sie die Suche in eine Schleife.

Liste aList = new Arraylist(); aList.add (neue Ganzzahl (1));

if (! AList = null & & aList.isEmpty()) { if (aList.contains (1)) { System.out.println ("got it"); } }

2

Sie können Schnittpunktoperationen mit Ihren ArrayList-Objekten verwenden.

Etwas wie folgt aus:

List<Integer> l1 = new ArrayList<Integer>(); 

l1.add(1); 
l1.add(2); 
l1.add(3); 

List<Integer> l2= new ArrayList<Integer>(); 
l2.add(4); 
l2.add(2); 
l2.add(3); 

List<Integer> l3 = new ArrayList<Integer>(l2); 
l3.retainAll(l1); 

Jetzt sollten l3 nur gemeinsame Elemente zwischen L1 und L2 haben.

+0

Mit 2 Listen scheint einfach! Was ist, wenn es 4 gibt und wir nicht wissen, ob die Hexe Werte hat oder nicht? – Vagelism

Verwandte Themen