我有一个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的用户在线花费的所有时间的总和(“秒”属性)。
答案 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);
}