2016-04-05 23 views
-2

Schwierigkeit gefunden, diesen Code gemäß java8 Lambda-Ausdruck zu ändern. Der Code entfernt Schülerobjekt, die denselben Namen haben, und fügen dieses Objekt zu einem einzelnen Eintrag hinzu.Konvertieren verschachtelte Schleifen nach Java 8 verschachtelte Schleifen

public List<Student> removeDuplicates(List<Student> studentList) 

{ 

    List<Student> newStudentList=new ArrayList<Student>(); 
    List<String> studentNames= new ArrayList<String>(); 
    studentList.stream().forEach(e->studentNames.add(e.getName())); 
    List<String> studentNameList= new ArrayList<String>(); 
     for (Student student: studentList) { 
      int count=0; 
      for (String sname: studentNames) 
      { 
       if(student.getName().equals(sname)){ 
        count++; 
        } 
        else{ 
         count=0; 
        } 
        if(count==1) 
        { if(!studentNameList.contains(student.getName())){ 
         studentNameList.add(student.getName()); 
         newStudentList.add(student); 
        } 
        } 
       } 

      } 
} 
+2

tun Dieser Code sieht schrecklich aus. Vielleicht versuchen Sie zuerst, eine saubere Pre-Java 8-Lösung zu finden, bevor Sie versuchen, sie an neue Java-Funktionen anzupassen ... – Holger

+0

, aber das funktioniert nicht ------------ studentList.stream(). ForEach (e -> { \t \t \t studentNames.stream() -Filter (f -> e.getName() gleich (f));.. \t \t}); – priya

Antwort

1

dieses Versuchen

public Stream<Student> removeDuplicates(List<Student> studentList) { 
    return studentList 
      .stream() 
      .collect(
        Collectors.toMap(Student::getName, s -> s, 
          (fst, snd) -> fst)).values().stream(); 
} 
+0

Danke, das ist sehr nützlich für mich. – priya

0

Hier können Sie Streams verwenden.

public List<Student> removeDuplicates(List<Student> studentList) { 
    return studentList.stream() 
         .map(Student::getName) 
         .distinct() 
         .map(x -> studentList.stream() 
              .filter(y -> y.getName().equals(x)) 
              .findFirst() 
              .get()) 
         .collect(Collectors.toList()); 
} 
+0

Danke, das ist die Lösung ist am nützlichsten. – priya

+0

@priya Fühlen Sie sich frei zu akzeptieren und upvote es. –

0

Ich nehme an, Sie mit einem List landen müssen, sonst hätte man ein Set verwenden ausgewählt, die per definitionem eine einzigartige Sammlung ist. Ein Set könnte immer noch Teil der Lösung sein, jedoch etwas wie

Set<String> tempUniqueValues = new HashSet<>(); 
List<String> listWithoutDupes = myList.stream() 
     .filter(tempUniqueValues::add)   // filters out non-unique values 
     .collect(Collectors.toList()); 
Verwandte Themen