In Anbetracht der folgenden Klasse zu holen:Java 8: Welches ist der bessere Weg ist, ein Objekt basierend auf Attributen in einer Sammlung
@Setter
@Getter
@EqualsAndHashCode(exclude = "text")
@ToString
public class Foo {
private Long xKey;
private Long yKey;
private String text
}
Wenn ich List<Foo> fooList
und ich habe in dieser haben Listenelemente holen, wo:
{xKey, yKey} combination is in Map<Long,Long> combination = {{10L,20L},{11L,35L},{4L,1L}}
1 st Weise ist für jede Iteration durch und unter Verwendung von .get() Methode:
for(Entry<Long,Long> entry: combination.entrySet()){
Foo tempFoo = new Foo(entry.getKey(),entry.getValue(),null);
Foo actualFoo = fooList.get(tempFoo);
System.out.println(actualFoo);
}
2. Weg ist durch Java-8-Streams
combination.foreach((k,v) -> {
Foo actualFoo = fooList.stream()
.filter(f -> f.getXKey.equals(k) && f.getYKey.equals(v))
.findFirst()
.orElse(null);
System.out.println(actualFoo);
})
Welche ist besser in der Leistung und Codierung der Praxis?
EDIT: Nachdem in Kommentaren suchen erkannte, dass ein Fehler, da in der ersten Code-Schnipsel ist statt fooList.get(tempFoo);
es fooList.get(fooList.indexOf(tempFoo));
gewesen
Eine 'Liste' hat keine Methode 'get (Foo)'. –
Holger
hinzugefügt bearbeiten Kommentar – harvey123