使用java 8流的if-else条件

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条件.

Old*_*eon 8

也许你过于复杂了.

    List<User> users = new ArrayList<>();
    users.stream()
            .filter(Objects::nonNull)
            .forEach(u -> u.setRole(u.isActive()?"ABC":"XYZ"));
Run Code Online (Sandbox Code Playgroud)


C-O*_*tto 5

我猜想你想要的行为,如果我错了,请纠正我.

您可以在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)

  • `u - > u.setRole(u.isPresent()?"ABC":"XYZ");` (6认同)