Find specific object in a List by attribute

后端 未结 3 1257
日久生厌
日久生厌 2020-12-20 21:54

I have a list:

List userList = new ArrayList<>();

Where I add the following:

User father = new User()         


        
相关标签:
3条回答
  • 2020-12-20 22:03

    Answer to your question is here: https://stackoverflow.com/a/1385698/2068880

    Stream peters = userList.stream().filter(p -> p.user.name.equals("Peter"))
    

    However, as ruakh suggested, it's more reasonable to use Map<String, UserItem> to make it faster. Otherwise, it will iterate all the objects in the list to find users with name "Peter".

    0 讨论(0)
  • 2020-12-20 22:06

    The obvious solution would be iterating on the list and when the condition is met, return the object:

    for (User user : userList) {
        if ("peter".equals(user.getName()) {
            return user;
        }
    }
    

    And you can use filter (Java 8):

    List<User> l = list.stream()
        .filter(s -> "peter".equals(s.getUser()))
        .collect(Collectors.toList());
    

    to get a list with all "peter" users.

    As suggested in comments, I think using Map is a better option here.

    0 讨论(0)
  • 2020-12-20 22:19

    Other way with parallelStream with findAny

    Optional<UserItem> optional = userList.parallelStream().findAny(p -> p.user.getName().equalsIgnoreCase("Peter"));
    UserItem user = optional.isPresent() ? optional.get() : null; 
    
    0 讨论(0)
提交回复
热议问题