我有一个形式为<gameID, Achievement>
的散列图,其中Achievement是一个用户定义的对象,它包含AchievementID,AchievementName和AchievementPoints:
[1003901=(901, Shoot 'em up, 100), 1001902=(902, Tango down, 15)]
我想在整个游戏中添加基于AchievementPoints的值,所以在这种情况下,我会加上100和15.我试图使用for循环来迭代,但是,我可以&#39;似乎弄清楚如何专门访问AchievementPoints成员,并只使用该值。有没有办法只是遍历hashmap,只是根据对象值的特定成员添加值?
编辑1:
对不起,为了澄清,我的gameID实际上是一个组合,其中前四个数字是实际的游戏ID,接下来的三个是achievementID。这样做是为了保持id的独特性。这就是为什么我要添加这两个
答案 0 :(得分:2)
假设使用Java 8,如果您只想在地图中添加所有值,则可以执行以下操作:
achievementMap.values().stream().mapToInt(a -> a.getAchievmentPoints()).sum();
这会创建一个迭代地图中所有值的流,执行Achievement
实例到整数值的转换,选择对象的achievementPoints
属性然后将其全部加起来
答案 1 :(得分:1)
我猜这或多或少是你想要的:你有多个游戏,每个游戏都有多个成就:Map<Integer,List<Achievement>
。
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main
{
static class Achievement
{
private int id;
private String name;
private int score;
public Achievement( int id, String name, int score )
{
this.id = id;
this.name = name;
this.score = score;
}
}
public static void main( String[] args )
{
Map<Integer, List<Achievement>> map = new HashMap<>();
map.put( 1003, Arrays.asList( new Achievement( 901, "Shoot 'em up", 100 ) ) );
map.put( 1001, Arrays.asList( new Achievement( 902, "Tango down", 15 ) ) );
System.out.println( map.get( 1003 ).stream().mapToInt( ( a ) -> a.score ).sum() );
}
}
答案 2 :(得分:0)
如果您要做的是将通过游戏收集的所有积分相加,假设您在encapsulation
课程中使用Achievement
并且有成就点的getter
方法,那么如果你像这样迭代hashMap
:
int sum = 0;
Iterator it = gameMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
sum += pair.getValue().getAchievementPoints();
}
System.out.println("Sum = " + sum);
答案 3 :(得分:0)
int total = 0;
HashMap<String,Achievement> map = new HashMap();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
Achievement achievement = (Achievement) entry.getValue();
//Once you have achievement Object, apply your custom logic here.
total = total + achievement.achievementPoints;
}