小编Gus*_*lva的帖子

使用Java 8 Streams的收集器根据现有键/值对增加值

假设有一个List<Object>和,Object其中包含两个方法:getUserIdgetPoints

考虑List<Object>包含三个对象,并且它们包含以下数据:

userId A; 3 points
userId A; 5 points
userId B; 1 point
Run Code Online (Sandbox Code Playgroud)

正确收集此内容后,我希望Map<String, Integer>它看起来像这样:

A: 8,
B: 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Java的8个功能接口(流)进行此操作,因为我只需要最终结果,而在它们之间也不需要任何映射。如果没有其他方法,我愿意对此进行修改。我首先想到了这个:

this.service.getListObject()
    .stream()
    .collect(Collectors.toMap(Object::getUserId, Object::getPoints));
Run Code Online (Sandbox Code Playgroud)

但是,这显示出不足,因为它将始终用最新值替换密钥,从而产生:

A: 5,
B: 1
Run Code Online (Sandbox Code Playgroud)

如何调整的最后一位,Collectors.toMap()以根据已存储在地图中的值自动增加其值,以便产生上面的结果?

java functional-programming java-8 java-stream

5
推荐指数
1
解决办法
92
查看次数

R代码非常慢

最近我一直在研究一些R脚本来做一些报告.涉及的任务之一是检查列中的值是否与另一个数据帧的任何行匹配.如果是,则设置逻辑为TRUE/FALSE 的新列.

更具体地说,我需要帮助改进这个代码块:

for (i in 1:length(df1$Id)) {
  df1 <- within(df1, newCol <- df1$Id %in% df2$Id)
}
df1$newCol <- as.factor(df1$newCol)
Run Code Online (Sandbox Code Playgroud)

数据集有大约10k行,所以没有必要需要6分钟(测试proc.time()完全执行它,这就是它目前正在发生的事情.另外,我需要这样做其他类型的检查,所以我真的需要得到这个权利.

我在那里做错什么是浪费时间去完成?

谢谢您的帮助!

performance loops r

1
推荐指数
1
解决办法
66
查看次数