我有以下自定义列表对象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
class Country(){
String countryName;
String stateName;
// getter and setter for CountryName and StateName
}
我该怎么做?
答案 0 :(得分:4)
首先,您使用的是错误的术语。您没有过滤流元素,而是将流元素映射到不同类型的元素。
仅map
到Country
个实例:
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()));