在java 8

时间:2018-04-17 08:15:19

标签: java java-8

我有以下自定义列表对象List<Person> personList

class Person(){
    String name;
    String age;
    String countryName;
    String stateName;
// getter and setter for all property
}

如果我想根据countryName或StateName映射personList,那么我会这样做:

List<String> countryName = personList.stream().map(Person :: getCountryName)

List<String> stateName = personList.stream().map(Person :: getStateName)

但是现在我想在新的自定义列表对象List<Country> countryandStateList

中基于CountryName和StateName映射personList
class Country(){
    String countryName;
    String stateName;
// getter and setter for CountryName and StateName
}

我该怎么做?

3 个答案:

答案 0 :(得分:4)

首先,您使用的是错误的术语。您没有过滤流元素,而是将流元素映射到不同类型的元素。

mapCountry个实例:

List<Country> countries =
    personList.stream()
              .map(p->new Country(p.getCountry(),p.getState()))
              .collect(Collectors.toList());

这假设存在相关的构造函数。如果不是这样,您也可以使用无参数构造函数,然后在创建的实例上调用setter。

答案 1 :(得分:0)

首先过滤,然后在地图中创建一个对象:

List<Country> countryList = personList.stream().map(new Country(person.getCountryName(), person.getStateName()).collect(Collectors.toList());

答案 2 :(得分:0)

您可以使用以下内容:

List<Country> countries = personList.stream()
            .map(person -> new Country(person.getCountryName(), 
                    person.getStateName()))
            .collect(Collectors.toList());

List<Country> countries = personList.stream()
            .collect(Collectors.mapping(person -> new 
                             Country(person.getCountryName(),
                    person.getStateName()), Collectors.toList()));