如果对象具有相同的ID,请遍历列表并添加属性

时间:2019-09-07 10:47:34

标签: java

我有一个User类,该类具有多个属性,包括ID。我想知道的是,如果用户具有相同的ID,那将是浏览此列表并将time属性添加到TotalTime的最佳方法。

我尝试了一个double for循环,比较C(语言)double循环的每种对象类型以遍历列表并添加。但是我认为这不是Java中的正确方法,我认为可能有些方法可以使编写更简洁的代码变得更加容易。

我上了这个课:

public class User {
private String Date;
private String Time;
private String Status;
private String Id;
private String Duration;
private Long Seconds;
private Long Totaltime;
}

我知道我可以使用类似以下的内容来迭代它。 我使用了两个for循环,但是我很确定这不是Java中的正确方法。

for (User user : users) {
for (User user : users) {
.....
.....

}
}

似乎没有路可走。我想找到一种很好且简单的方法。请帮忙(我对Java很陌生)

我想在“用户”的一个属性(总计时间)中添加具有相同ID的用户在线花费的所有时间的总和(“秒”属性)。

2 个答案:

答案 0 :(得分:1)

按照@yahavi的建议,您可以使用Collectors.groupingBy

ArrayList<User> users = new ArrayList<User>() {{
    add(new User("1", 2L));
    add(new User("2", 2L));
    add(new User("1", 3L));

}};

Map<String, Long> result = users.stream()
                .collect(groupingBy(User::getId, summingLong(User::getTime)));

输出

{1=5, 2=2}

答案 1 :(得分:0)

因此,您可以使用Map<String, User>,其中第一个String参数是您的ID,第二个是您的对象。

Map<String, User> users = new HashMap<>();

填充列表:

users.put(key, value);

因此,您可以这样做来找到您的钥匙:

if(users.containsKey(idUser)){
    users.get(idUser).setTotalTime(1000);
}