如何比较保存在ArrayList中的对象中的字符串,然后添加这些字符串的值(如果它们是相等的)?
我知道如何检查StringX == StringY还是StringX.equals(StringY),但无法理解如何比较ArrayList中的字符串,更不用说如何添加字符串对象中保持的双值(只有当该字符串相等时)。
示例类BaseBallTeam有两个属性;
我想把所有的homeRuns(双)加起来,由所有的Kats(string)组成。以及所有的homeRuns(双)由所有的麦克风等。
这是我的代码:
ArrayList<BaseBallTeam> list = new ArrayList<>();
double totalRuns = 0;
for(int i = 0; i<list.size();i++){
for(int j = 1; j<list.size();j++){
if(list.get(i).getTeamMember().equals(list.get(j).getTeamMember())){
totalRuns += list.get(j).getHomeRuns() +list.get(i).getHomeRuns();
System.out.println("Amount of " + list.get(i).getTeamMember() + "s hit " + totalRuns"home runs);
}
} 我的代码提供了所有团队成员累积的频率,而不是将两个单独的分数相加。
发布于 2018-08-02 12:25:20
解决问题的最佳方法是使用java 8功能。您可以根据所有BaseBallTeam对象的名称和每个播放器的homeRuns总量与来自java.util.stream.Collectors的收集器对其进行分组:
样本代码:
BaseBallTeam kate1 = new BaseBallTeam("Kate", 2);
BaseBallTeam kate2 = new BaseBallTeam("Kate", 2);
BaseBallTeam mike1 = new BaseBallTeam("Mike", 4);
BaseBallTeam mike2 = new BaseBallTeam("Mike", 2);
List<BaseBallTeam> list = Arrays.asList(kate1, kate2, mike1, mike2);
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(t -> t.getTeamMember(),
k -> k.getHomeRuns(),
(t1, t2) -> t1 + t2)
);
System.out.println(map);输出:{Mike=6,Kate=4}
在此:
然后,您可以迭代您的地图如下:
map.entrySet().forEach(e ->
System.out.println("Amount of " + e.getKey() + "s hit " + e.getValue() + " home runs"));产出:
迈克斯打了6次全垒打 凯特打了4次全垒打
发布于 2018-08-02 09:44:35
你应该先看看团队成员是什么,然后你应该数他们的本垒打:
ArrayList<BaseBallTeam> list = new ArrayList<>();
// fill the list
ArrayList<String> teamMembers = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (!teamMembers.contains(list.get(i).getTeamMember())) {
teamMembers.add(list.get(i).getTeamMember());
}
}
double totalRuns = 0;
for (int i = 0; i < teamMembers.size(); i++) {
double runs = 0;
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getTeamMember().equals(teamMembers.get(i))) {
runs += list.get(j).getHomeRuns();
}
}
System.out.println("Amount of " + teamMembers.get(i) + "s hit " + runs + " home runs");
totalRuns += runs;
}
System.out.println("Total homeruns " + totalRuns);发布于 2018-08-02 10:25:43
前面的答案效果很好。这里有一个简化代码和提高可读性的想法(不过,它也是这样做的!):
BaseBallTeam kate1 = new BaseBallTeam("Kate", 2.0);
BaseBallTeam kate2 = new BaseBallTeam("Kate", 3.0);
BaseBallTeam mike1 = new BaseBallTeam("Mike", 1.0);
BaseBallTeam mike2 = new BaseBallTeam("Mike", 5.0);
List<BaseBallTeam> list = Arrays.asList(kate1, kate2, mike1, mike2);
ArrayList<String> teamMembers = new ArrayList<>();
for(BaseBallTeam team : list){
if(!teamMembers.contains(team.getTeamMember())){
teamMembers.add(team.getTeamMember());
}
}
double totalRuns = 0;
for(String teamMember : teamMembers){
double runs = 0;
for(BaseBallTeam team : list){
if(team.getTeamMember().equals(teamMember)){
runs += team.getHomeRuns();
}
}
System.out.println("Amount of " + teamMember + "s hit " + runs + " home runs");
totalRuns += runs;
}
System.out.println("Total homeruns " + totalRuns);https://stackoverflow.com/questions/51648898
复制相似问题