2017-05-29 1 views
1

diese Klasse Gegeben im Stil Java 8 geschrieben, wollte ich sehen, ob ich zweimal nicht brauchen, um den Strom api zu nennen: Wie kann ich mithilfe der Java 8-Stream-API mehrere Eigenschaften von einem Java-POJO abrufen?

import java.util.*; 

public class Foo { 

public static void main(String... args) { 
    List<Person> persons = new ArrayList<>(); 
    init(persons, Person::new, "John", "Doe"); 


    persons.stream() 
      .map(Person::getFirstName) 
      .forEach(System.out::println); 

    persons.stream() 
      .map(Person::getLastName) 
      .forEach(System.out::println); 
} 

@FunctionalInterface 
interface PersonFactory { 
    Person create(String firstName, String lastName); 
} 

private static void init(List<Person> persons, PersonFactory factory, String fn, String ln) { 
    persons.add(factory.create(fn, ln)); 
} 

} 

class Person { 
    private final String firstName; 
    private final String lastName; 

    public Person(String fName, String lName) { 
     this.firstName = fName; 
     this.lastName = lName; 
    } 

    public String getFirstName() {return this.firstName;} 
    public String getLastName() {return this.lastName;} 
} 

Ich wollte sehen, wenn ich könnte stattdessen stream die „Personen“ List in einem

gehen.

Irgendwelche Vorschläge?

+3

Ich verstehe nicht, um Ihre Nutzung Fall. Wenn Sie alle Elemente der Liste durchlaufen müssen, verwenden Sie einfach 'List.forEach', Sie brauchen nicht einmal einen Stream. Ein Stream ist nützlich, wenn Sie z. B. einige Elemente der Liste filtern oder eine Transformation auf die Elemente der Liste anwenden müssen, dh jede Person, deren Name mit "A" beginnt, in einen "Frosch" transformieren und dann in einer separaten Liste sammeln . –

Antwort

2

Wenn Sie nicht Objekt auf ein anderes umwandeln müssen, können Sie versuchen, diese

persons.forEach(i -> System.out.println(i.getFirstName() + " " + i.getLastName())); 
0

ich denke, es hilfreich sein könnte für Sie Karte mit

Map<String, String> mapp = persons.stream().collect(HashMap::new, 
    (m, c) ->{ 
      m.put(c.getFirstname(), ""); 
      m.put(c.getLastname(), ""); 
    },HashMap::putAll); 

System.out.println(mapp.keySet().toString()); 
Verwandte Themen