对一个集合的元素执行操作并迭代结果以执行某些其他操作

时间:2017-12-05 15:28:34

标签: java java-8 java-stream

如果我有2个收藏品,

List<String> domainArr;
List<Person> personArr;

我想对String中的每个元素进行一次小的转换,然后迭代personArr到

List<String> urlArr = strArr.stream()
    .map(str -> "https://" + strArr)
    .collect(Collectors.toList());

我有像

这样的方法
List<Person> getPersons(String url){
 /*makes a restful call to the url and gets a List of objects for each URL.*/
}

我想遍历来自urlArr的每个url并将其传递给getPersons(url)方法,并且对于每个获得的结果(List),我想迭代该人并执行更多操作

之类的人
persons.stream()
     .filter(Objects::nonNull)
     .map(Person::getName)
     .filter(Objects::nonNull)
     .collect(Collectors.toList());

我希望从所有结果中获得所有人名。

我想知道如何在Java 8中实现这一功能。任何指针?

1 个答案:

答案 0 :(得分:3)

您可以使用flatMap将您的List<T>信息流转换为T

的平流
strArr.stream()
    .map(str -> "https://" + strArr)
    .map(url -> getPersons(url))
    .flatMap(persons -> persons.stream())
    .filter(Objects::nonNull)
    .map(Person::getName)
    .filter(Objects::nonNull)
    .collect(Collectors.toList());