【问题标题】:How to iterate over several lists of objects and get summary of objects in Java?如何遍历多个对象列表并获取 Java 中的对象摘要?
【发布时间】:2020-08-19 07:18:13
【问题描述】:

假设我有一个如下的类。

public class User {
    private String userType;
    private int numOfUsers;
}

并且有不止一个列表包含用户类型的对象。

List<User> list1 = < (userType:clerk, numofUsers:3 ), (userType:painter, numofUsers:4 ), (userType:engineer, numofUsers:10 ) >
        
List<User> list2 = < (userType:clerk, numofUsers:3 ),(userType:electrician, numofUsers:14 ), (userType:welder, numofUsers:5 ), (userType:engineer, numofUsers:10) >
    
List<User> list3 = < (userType:carpenter, numofUsers:4 ),(userType:welder, numofUsers:10 ) >

我需要创建一个用户列表,它给出了每种类型的用户对象的总和,如下所示。

List<User> userCount  = < (userType:clerk, numofUsers:6 ), (userType:painter, numofUsers:4 ), (userType:engineer, numofUsers:20 ),(userType:electrician, numofUsers:14 ), (userType:carpenter, numofUsers:4 ) ,(userType:welder, numofUsers:15 ) >

我如何在 Java 中做到这一点?

【问题讨论】:

  • 你能告诉我们你到目前为止所做的尝试吗?

标签: java list java-stream


【解决方案1】:

您是否要使用:

List<User> result = Stream.of(list1, list2, list3)
        .flatMap(Collection::stream)
        .collect(Collectors.groupingBy(User::getUserType, Collectors.summingInt(User::getNumOfUsers)))
        .entrySet().stream()
        .map(e -> new User(e.getKey(), e.getValue()))
        .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    您可以使用 Java Stream API。使用Collectors.toMap 并合并NumOfUsers 用于相同类型。然后获取ArrayList中的值。

    List<User> result = new ArrayList<>(
           Stream.of(list1, list2, list3)  // Stream of List of List
            .flatMap(Collection::stream)   // Flatten into a single list
            .collect(Collectors.toMap(User::getUserType, i -> i,   //Map by UserType and  merge user having same type
                     (a,b) -> new User(a.getUserType(), a.getNumOfUsers() + b.getNumOfUsers())))
            .values());   // Take only values of the map
    

    【讨论】:

    • 谢谢@User - 支持不要说谢谢。这个答案也适用于我。
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多