New*_*bie 2 java java-8 java-stream
场景:我需要List使用Java 8流API基于某些字段条件为对象设置一些值.
以下是对象的示例User.
public class User{
private int id;
private String name;
private String text;
private boolean isActive;
}
Run Code Online (Sandbox Code Playgroud)
这是我编写的代码
List<User> users = userDao.getAllByCompanyId(companyId);
users.stream()
.filter(Objects::nonNull)
.filter(User::isActive)
.peek(user -> user.setText('ABC'))
.filter(user -> !user.isActive())
.peek(user -> user.setText('XYZ')
Run Code Online (Sandbox Code Playgroud)
我知道我根据条件将值设置为object的方式是错误的.
这只是一个使用流的试用版,最后我需要将值设置为usersobject.
有没有办法处理if-else条件.
也许你过于复杂了.
List<User> users = new ArrayList<>();
users.stream()
.filter(Objects::nonNull)
.forEach(u -> u.setRole(u.isActive()?"ABC":"XYZ"));
Run Code Online (Sandbox Code Playgroud)
我猜想你想要的行为,如果我错了,请纠正我.
您可以在lambda表达式中使用块:
List<User> users = userDao.getAllByCompanyId(companyId);
users.stream().filter(Objects::nonNull).forEach(user -> {
if (user.isPresent()) {
user.setRole("ABC");
} else {
user.setRole("XYZ");
}
});
Run Code Online (Sandbox Code Playgroud)