Wzór Znalazłem bardzo przydatna jest do niech klasy nadrzędnej (w tym przypadku klasa Contact
) tworzenie i powrócić strumienie dzieci obiektów (w tym przypadku przyjaciół akcji IDS):
public class Contact {
private List<String> sharedFriendsIds;
public Stream<String> sharedFriendsIds() {
return sharedFriendsIds == null ? Stream.empty() : sharedFriendsIds.stream();
}
public List<String> getSharedFriendsIds() {
return sharedFriendsIds;
}
}
Konwencja to nazwa metody, która zwraca strumień jako przesyłany atrybut. Ta metoda zawiera już kontrolę zerową.
Potem coraz wspólnych znajomych Identyfikatory dla wszystkich kontaktów jest znacznie prostsze:
List<String> sharedContacts = contactsList.stream()
.flatMap(Contact::sharedFriendsIds)
.collect(Collectors.toList());
Trzeba użyć flatMap()
w celu spłaszczyć elementy listy dzieci do jednej listy, w przeciwnym razie” d uzyskać listę strumieni.
Uwaga 1: nie trzeba używać sequential()
, ponieważ użycie stream()
na liście kontaktów już zwraca strumień sekwencyjny.
Uwaga 2: jeśli chcesz ostateczna lista mają być sortowane, należy użyć sorted()
na potoku:
List<String> sharedContacts = contactsList.stream()
.flatMap(Contact::sharedFriendsIds)
.sorted()
.collect(Collectors.toList());
Słowo "I" jest zawsze pisane wielką literą po angielsku. Tak samo jest z początkiem każdego zdania. Jeśli publikujesz z telefonu komórkowego, większość nowoczesnych telefonów komórkowych naprawi te błędy, jeśli je odpowiednio skonfigurujesz. –
Dlaczego potrzebujesz '.sequential()'? –