【发布时间】:2021-06-11 05:50:11
【问题描述】:
我有一个类 Agent,它有以下成员:
class Agent{
String name;
long funds;
//... getters and setters, parameterized constructor
}
现在,我有一个 Agent 类对象的列表。
ArrayList<Agent> listAgents=new ArrayList<Agent>();
我想给表现最好的人打星,比如资金超过 100000 的人给 5 星,资金超过 80000 的人给 4 星,等等。
我想将此记录存储在 Map
中,例如
我尝试了以下代码:
Map<String,String> star=listAgents
.stream()
.collect(Collectors.groupingBy(agn->giveStars(agn.getGeneratedFund())));
这里的 giveStars 函数定义如下:
public static String giveStars(long generatedFund) {
if(generatedFund>=100000)
return "*****";
else if(generatedFund<100000&& generatedFund>=80000)
return "****";
else if(generatedFund<80000 && generatedFund>=60000)
return "***";
return "";
}
这不起作用。另外,我认为这不是正确的方法。 如何使用 Stream API 的函数来做到这一点? 任何帮助,将不胜感激。提前致谢。
【问题讨论】:
-
你给 5 颗星只要 100K+ 所以它总是首先返回,4 星的条件永远不会正确(相同的数字小于 100K 和超过 800K),所以 1M+ 应该给 5 颗星。大数最好用下划线隔开:
1_000_000、800_000等 -
@Alex Rudenko 感谢您的回复以及您对下划线概念的建议。这些数字仅用于演示。对困惑感到抱歉。实际上,该 group by 并没有给出预期的结果。
标签: java collections java-stream collectors