2016-06-08 2 views
0

Ich habe ein Szenario, wo 2 Listen mit ersten Spalte verglichen werden soll in beiden Listen als eindeutige ID und dieser Unterschied im Rest der Spalten für entsprechende IDs müssen abgerufen werden.Um den Unterschied in Spalten von Daten in Bezug auf eindeutige Spalten in Java zu finden

Eg

Liste 1
Apple-12 1
12 Windows-3 5

Liste 2
Apple-12 1 4
Windows-12 3 5

Ausgang: Apfel 4

+0

Ich versuchte den folgenden Code, aber funktioniert nicht, Set s1 = neue HashSet (List1); \t \t \t Satz s2 = neuer HashSet (Liste2); \t \t \t s2.removeAll (s1); \t \t \t diff = neue ArrayList <> (s2); \t \t} \t \t zurück diff; Dies gibt Apple 12 1 4 zurück, aber ich brauche nur Apple 4 –

Antwort

0

Ich habe Kommentare hinzugefügt. Überprüfen Sie den folgenden Code:

import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List; 
import java.util.TreeSet; 

public class AddTwoArray { 
    public static void main(String[] args) { 
     List<String> list1 = new ArrayList<String>(); 
     list1.add("Windows 12 3 5"); 
     list1.add("Apple 12 1"); 
     list1.add("Orange"); 
     List<String> list2 = new ArrayList<String>(); 
     list2.add("Apple 4 12 1"); 
     list2.add("Orange 5"); 
     list2.add("Windows"); 

     TreeSet s1 = new TreeSet<String>(list1); 
     TreeSet s2 = new TreeSet<String>(list2); 
     TreeSet s3 = new TreeSet<String>(list1); 
     TreeSet s4 = new TreeSet<String>(list2); 
     s1.removeAll(s2); 
     s4.removeAll(s3); 
     List<String> diff = new ArrayList<String>(s1); 
     List<String> diff1 = new ArrayList<String>(s4); 

     List<String> diffArray = null; 
     for (int tmp = 0 ; tmp < diff.size(); tmp++) { 
      diffArray = findDiff(diff.get(tmp).split(" "), diff1.get(tmp).split(" ")); // call method findDiff 

      if(diffArray != null){ 
       for(String tmp1: diffArray){ 
        String[] diffSplit = tmp1.split(" "); 
        for(int i =0; i < diffSplit.length; i++){ 
         System.out.print(diffSplit[i] + " "); 
        } 
       } 
      } 
      System.out.println(); 
     } 
    } 

    public static List<String> findDiff(String[] diff, String[] diff1) { // find the different between two arrays 
     HashSet<String> map = new HashSet<String>(); 
     List<String> diffArray = new ArrayList<String>(); 
     diffArray.add(diff[0]); // add unique key 
     for (String i : diff){ 
      map.add(i); 
     } 
     for (String i : diff1) { 
      if (!map.contains(i)){ //find different element between diff and diff1 
       diffArray.add(i); 
      } 
     } 

     map = new HashSet<String>(); 

     for (String i : diff1) 
      map.add(i); 
     for (String i : diff) { 
      if (!map.contains(i)){ //find different element between diff1 and diff 
       diffArray.add(i); 
      } 
     } 
     return diffArray; //diff array 
    } 
} 

Wenn Sie nicht klar kommentieren.

+0

Vielen Dank, es funktioniert gut, aber um es zu meiner Anwendung zu passen, muss ich die Ausgabe in eine Datei wie diese drucken: FileUtil.writeToFile (diff, outputPath + "\\ TestData \\" + Ausgabedateiname, false); Daher muss ich das Diff zurück zu einer Funktion des Typs ArrayList zurückgeben, aber das Diff, zu dem Sie Berechnungen durchgeführt haben, ist vom Typ String. Könnten Sie mir bitte helfen, dies zu lösen? –

+0

@Sindhu Sie können beide Listen (diff, diff1) in die Karte einfügen und die Karte an andere Funktion zurückgeben. Machen Sie den anderen Funktionstyp als Map zurück. Map > map = new HashMap >(); \t \t map.put ("FirstList", diff); \t \t map.put ("FirstList", diff1); – CrazyJavaLearner

+0

Ihr Code funktioniert nicht, wenn die Liste 2 Daten wie Apple 4 1 12 hat ..... –

0

Für ex

ArrayList l1=new ArrayList(); 

    l1.add("a"); 

    l1.add("b"); 

    l1.add("c"); 

    l1.add("d"); 

    l1.add("e"); 

    l1.add("f"); 

    ArrayList l12=new ArrayList(); 
    l12.add("z"); 
    l12.add("b"); 
    l12.add("c"); 
    l12.add("d"); 
    l12.add("e"); 
    l12.add("g"); 


ArrayList outList = new ArrayList(); 


for(int i=1 ;i<l12.size(); i++) 

{ 

     if(!(l1.contains(l12.get(i)))) 
     { 
      outList.add(l12.get(i)); 


     } 
    } 

Hier outList enthält Element, das Unterschied zwischen 2 Liste sind aber ersten Wert der Liste l1 und l12 ausgenommen.

+0

Danke, aber ich muss in Bezug auf welches System den Wert der anderen Spalten geändert haben, so dass ich Apple auch angezeigt werden muss. –

+0

Fügen Sie also dieses Element Apple zur outList hinzu, bevor Sie das Differenzelement hinzufügen – Veeresh123

Verwandte Themen