2016-07-24 3 views
0

Ich habe einen ClassFoo, dass ein Constructor hat die name und id setzt.Ersetzen Sie den regulären foreach mit Strom/Lambda/Methode verweist

In einem anderen Class habe ich eine List<String> von Nachrichten, wo ich die name und id extrahieren kann.

Ich bin in der Lage, erfolgreich die Constructor durch Schleifen durch die Liste mit regulären foreach Schleife. Wie erreiche ich dies mit StreamJava 8 oder Lambda oder Method References

public class ConstructorTest { 

public static void main(String[] args) { 
    List<Foo> fooList = new ArrayList<Foo>(); 
    List<String> userList = new ArrayList<String>(); 
    userList.add("username1_id1"); 
    userList.add("username2_id2"); 
//I want to replace the below foreach loop with stream/lambda/methodreferences 
    for (String user : userList) { 
     Foo foo = new Foo(getName(user), getId(user)); 
     fooList.add(foo); 
    } 
} 

private static String getName(String user) { 
    return user.split("_")[0]; 
} 

private static String getId(String user) { 
    return user.split("_")[1]; 
} 
} 

Foo Klasse:

public class Foo { 

public Foo(String name, String id) { 
    this.name = name; 
    this.id = id; 
} 

private String name; 
private String id; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

} 

Antwort

1

Wie wäre das?

userList.stream().map(user -> new Foo(getName(user), getId(user)).forEach(userList::add) 

Oder diese

userList.forEach(user -> userList.add(new Foo(getName(user), getId(user)))) 
+0

Ich habe 'userList.stream() parallel() Karte (Benutzer -> new Foo (getName (Benutzer), getId (Benutzer)))... Foreach (fooList :: hinzufügen); \t \t fooList.forEach (Benutzer -> System.out.println (user.getName() + "" + user.getId())); 'und ich habe null Zeiger Ausnahme –

+0

@ user1629109 Fügen Sie keine Liste mit einem parallelen Stream hinzu. – michaelsnowden

+0

Warum so? Irgend ein bestimmter Grund? manchmal funktioniert es und manchmal gibt es "NPE" –

Verwandte Themen