chr*_*ina 3 java java-8 java-stream
在java8,我有一组字符串:
final Set<String> nameSet = this.getNames();
Run Code Online (Sandbox Code Playgroud)
我想得到一个列表People,People根据字符串设置名称Set.但是,People类没有类似的构造函数new People(name),它只能通过using setName方法实现.
以旧方式,我可以做类似的事情:
List<People> peoples = new ArrayList<People>();
for(String name: nameSet){
People people = new People();
people.setName(name);
peoples.add(people);
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用它Stream来转换呢?
如果可能,可能值得考虑添加一个People带名称的构造函数.然后你可以这样做:
List<People> peoples = nameSet.stream()
.map(People::new)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果你不能添加构造函数,你可以这样做:
List<People> peoples = nameSet.stream()
.map(name -> {
People people = new People();
people.setName(name);
return people;
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者在我看来更好:
List<People> peoples = nameSet.stream()
.map(name -> createPeopleFromName(name))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
代码中的其他地方有这个方法,也许在一个PeopleUtils类中:
public static People createPeopleFromName(String name)
{
People people = new People();
people.setName(name);
return people;
}
Run Code Online (Sandbox Code Playgroud)
也许还考虑将类重命名People为Person.
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |