Performing an operation over the elements of one collection and iterating over the result to perform some other operation

Deadly 提交于 2019-12-07 20:45:01

问题


If I have 2 collections,

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

I would like to make a minor transformation on each of the elements in the String and then iterate over the personArr to

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

I have a method like

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

I would like to iterate over each of the urls from urlArr and pass it to the getPersons(url) method and for each of the obtained result (a List), I would like to iterate over the person and perform more operations on the persons like

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

I am hoping to have all the person names here from all the results.

I was wondering how to do this the functional way in Java 8. Any pointers?


回答1:


You can use flatMap to convert your stream of List<T> into flat stream of 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());


来源:https://stackoverflow.com/questions/47657202/performing-an-operation-over-the-elements-of-one-collection-and-iterating-over-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!