Verwijder alle objecten in een arrayclist die aanwezig is in een andere arrayclist

Ik probeer in te lezen van twee bestanden en bewaar ze in twee afzonderlijke arraylisten. De bestanden bestaan ​​uit woorden die alleen zijn op een lijn of meerdere woorden gescheiden door komma’s.
Ik heb elk bestand gelezen met de volgende code (niet compleet):

ArrayList<String> temp = new ArrayList<>();
FileInputStream fis;
fis = new FileInputStream(fileName);
Scanner scan = new Scanner(fis);
while (scan.hasNextLine()) {
    Scanner input = new Scanner(scan.nextLine());
    input.useDelimiter(",");
    while (scan.hasNext()) {
        String md5 = scan.next();
        temp.add(md5);
    }
}
scan.close();    
return temp;

Ik heb nu twee bestanden in en verwijder alle woorden uit het eerste bestand dat ook in het tweede bestand bestaat (er zijn enkele dubbele woorden in de bestanden). Ik heb geprobeerd met for-lussen en andere dingen, maar niets heeft gewerkt, dus elke hulp zou zeer op prijs worden gesteld!

Bonusvraag: Ik moet ook achterhalen hoeveel duplicaten er in de twee bestanden zijn – ik heb dit gedaan door zowel arraylisten aan een hashset toe te voegen en vervolgens de grootte van de set van de gecombineerde grootte van de twee arraylisten af ​​te trekken – Is dit een goede oplossing, of kan het beter worden gedaan?


1, Autoriteit 100%

U kunt de removeAll-methode gebruiken om de items van één lijst uit een andere lijst te verwijderen.

Om de duplicaten te verkrijgen, kunt u de retainAll-methode gebruiken, hoewel uw aanpak met de set ook goed is (en waarschijnlijk efficiënter)


2, Autoriteit 42%

De verzamelfaciliteit heeft hiervoor een handige methode:

list1.removeAll(list2);

3, Autoriteit 27%

Eerst moet u de gelijke methode in uw aangepaste klasse overschrijven en de overeenkomende criteria van het verwijderen van de lijst

definiëren

public class CustomClass{
 @Override
    public boolean equals(Object obj) {
        try {
            CustomClass licenceDetail  = (CustomClass) obj;
            return name.equals(licenceDetail.getName());
        }
        catch (Exception e)
        {
            return false;
        }
    }
}

Ten tweede belt u de methode REMOVEALL ()

Lijst1.Removeall (lijst2);

Other episodes