2017-02-16 3 views
1

Lets sagen, ich habe zwei verschiedene Strings von gegebenen Pojo-Typ.String-Anpassung in verschachtelten für Schleife

Ich möchte eine Zeichenfolge abrufen, die nicht in einer anderen Liste gefunden wird und fügen Sie es in eine andere Liste (etwa Liste 3). wie kann ich das tun?

ich versuche, dies: -

for (SettlementReportNB showSellementReport : settlementReportList) 
     { 
      String merchantreferencenumber = showSellementReport.getMerchantreferencenumber(); 
      for (AllTransactions showAllTransaction : allTransactionsList) 
      { 
       String merchantTxnId = showAllTransaction.getMerchantTxnId(); 
       if (!merchantreferencenumber.equals(merchantTxnId)) 
       { 
        idNotFound.add(merchantTxnId); 
       } 
      } 
     } 

aber es gibt mir nicht eine erwartete Antwort.

  • Antwort sollte "drei" sein, weil es nicht in einer anderen Liste vorhanden ist.
+1

was ist Ihr erwartetes Ergebnis und was bekommen Sie jetzt – RamPrakash

+0

Antwort sollte „drei“ –

+0

Die Antwort sind hier stellt eine einfache Art und Weise festlegen, um Maßnahmen zu tun, auf Listen http: // Stackoverflow .com/questions/3590677/how-to-do-union-intersection-difference-und-reverse-data-in-java – RubioRic

Antwort

2

Sie fügen die Zeichenfolge hinzu, um zu früh zu ergeben. Ihr Code hat für die Schleife warten, bevor sie zu beenden Aufruf idNotFound.add();

definieren boolean Variable notFound, und setzen Sie ihn auf true vor der Schleife. Wenn Sie eine Übereinstimmung in der Schleife finden, setzen Sie die Variable auf false, und brechen Sie aus der Schleife.

Wenn die Variable bleibt true, nachdem die Schleife beendet ist, rufen idNotFound.add();

1

Oder könnten Sie so etwas wie folgt aus:

List list1 = Arrays.asList("one", "two", "three", "four", "five"); 
List list2 = Arrays.asList("one", "two", "four", "five"); 

//create a clone of list1 
List list3 = new ArrayList<>(list1); 

//remove all elements of list2 from list1 
list3.removeAll(list2); 

//output : [three] 
System.out.print(list3); 

Sie Witz am Ende list3 dass nur hat [drei]

Oder versuchen Sie etwas wie diesen, um Ihren vorhandenen Code zu behalten:

for (SettlementReportNB showSellementReport : settlementReportList) { 

    String allTransactionsList = showSellementReport.getMerchantreferencenumber(); 

    if (isNotContain(allTransactionsList, allTransactionsList)) 
    { 
     idNotFound.add(merchantTxnId); 
    } 

} 

private boolean isNotContain(List allTransactionsList, String merchantreferencenumber) { 

    for (AllTransactions showAllTransaction : allTransactionsList) 
    { 
     String merchantTxnId = showAllTransaction.getMerchantTxnId(); 
     if (merchantreferencenumber.equals(merchantTxnId)) 
     { 
      return false; 
     } 
    } 

    return true; 
} 
+0

Was ist, wenn Benutzer die ursprüngliche list1 Inhalte will? – RamPrakash

+0

einfach überprüfen Sie den Beitrag erneut (erstellen Sie eine neue Kopie von list1) –

+0

Überprüfen Sie das Update –

0

Ihre zweite For-Schleife überprüft nicht alle Element. Es prüft nur, ob ein Element nicht mit dem verglichenen String übereinstimmt. Sie müssen über die gesamte Liste iterieren, bevor Sie sicher sind, dass sie nicht bereits vorhanden ist, z.

for (SettlementReportNB showSellementReport: settlementReportList) { 

    boolean notPresent = false; 
    String merchantTxnId = null; 
    String merchantreferencenumber = showSellementReport.getMerchantreferencenumber(); 
    for (AllTransactions showAllTransaction: allTransactionsList) { 
     merchantTxnId = showAllTransaction.getMerchantTxnId(); 
     if (merchantreferencenumber.equals(merchantTxnId)) { 
      notPresent = false; 
      break; // get out of loop because it already exists 
     } else { 
      notPresent = true; 
     } 
    } 
    if (notPresent) idNotFound.add(merchantTxnId); 
} 

Oder Sie eine der anderen Antworten mit List.util Funktionen

+0

Danke Mann. Es klappt. –

+0

@PrinceKumar Kein Problem. Wenn diese Antwort Ihnen geholfen hat, können Sie es als angenommen markieren pls? –

0

Kann sein, dieser Fall

 List<String> a1 = new ArrayList<>(Arrays.asList("one", "two", "three", "four", "five")); 
     List<String> a2 = new ArrayList<>(Arrays.asList("one", "two", "four", "five")); 

     Set<String> s1 = new HashSet<>(a1); 
     Set<String> s2 = new HashSet<>(a2); 

     s2.removeAll(s1); 

     List<String> a3 = new ArrayList<>(s2); 

     List<String> result = new ArrayList<>(Arrays.asList("six")); 
     result.addAll(a3); 
0

Wenn Sie Java 8 verwenden dann Lambdas verwenden verwenden könnte - es wird viel schneller sein und sparen Sie eine Schleife.

0

Wenn Sie alle Elemente überprüfen müssen, die nur in der zweiten Liste nicht vorhanden sind, erstellen Sie einfach ein Set und verwenden Sie das! Contains aus der ersten Liste, wenn Sie beide Listen überprüfen müssen Beispiel unten:

Set<String> list3 = new HashSet<String>(); 
for (String text : list1) { 
    if (!list2.contains(text)) list3.add(text); 
} 
for (String text : list2) { 
    if (!list1.contains(text)) list3.add(text); 
} 
0
List a = new ArrayList(asList("one", "two", "three", "four", "five")); 
List b = new ArrayList(asList("one", "two", "four", "five")); 
List c = new ArrayList(); 
c.addAll(a); 
c.addAll(b); 
c.removeIf(o -> a.contains(o) && b.contains(o)); 
Verwandte Themen