Flo*_*Lei 5 java lambda java-8 java-stream
我想从列表中创建流,如果某个字段为真,则对某个对象执行某些操作.
让我告诉你到目前为止我做了什么:
List<UserData> userDataList = new ArrayList<>();
phoneNumbers.forEach(phoneNumber -> {
if (phoneNumber.getPrimary()) {
UserData userData = new UserData();
userData.setDescription(phoneNumber.getType());
userData.setValue(phoneNumber.getNumber);
userDataList.add(userData);
}
});
Run Code Online (Sandbox Code Playgroud)
因此,如果phoneNumber.getPrimary() == true不执行以下任务,请忽略它.
是的,你可以结合filter使用map来改造List相关要素进入Stream的UserData,然后将它们收集到List:
List<UserData> userDataList =
phoneNumbers.stream()
.filter(p -> p.getPrimary()) // or filter(ClassName::getPrimary)
.map(p -> {
UserData userData = new UserData();
userData.setDescription(p.getType());
userData.setValue(p.getNumber());
return userData;
})
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果UserData有一个带有类型和数字的构造函数,你可以缩短代码:
List<UserData> userDataList =
phoneNumbers.stream()
.filter(p -> p.getPrimary()) // or filter(ClassName::getPrimary)
.map(p -> new UserData(p.getType(),p.getNumber()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)