有没有办法只通过密钥对获取对和值的映射值?

时间:2018-04-28 20:36:51

标签: java hashmap

我有这张地图static Map<Pair<String,Integer>, Integer> wordTopic = new HashMap<>(); 基本上它是一个矩阵,我想要特定字符串的所有值(该对的密钥).. AKA一行的所有值..

这将获得一行的总和,但我不知道如何获取行本身,每个值都在一个数组或其他东西。

   wordTopic.entrySet()
                .stream()
                .filter(e -> e.getKey().getKey().equals(key))
                .mapToInt(Map.Entry::getValue)
                .sum();

2 个答案:

答案 0 :(得分:4)

您可以创建一个方法:

int[] getValuesByKey(Map<Pair<String,Integer>, Integer> map, String key) {
      return map.entrySet()
                .stream()
                .filter(e -> e.getKey().getKey().equals(key))
                .mapToInt(Map.Entry::getValue)
                .toArray();
}

给出一个map和一个键将产生所有值,其中入口键等于提供的键。

或者如果你想要一个Integer数组,那么你可以这样做:

Integer[] getValuesByKey(Map<Pair<String,Integer>, Integer> map, String key) {
      return map.entrySet()
                .stream()
                .filter(e -> e.getKey().getKey().equals(key))
                .map(Map.Entry::getValue)
                .toArray(Integer[]::new);
}

或者如果您想要检索列表。

List<Integer> getValuesByKey(Map<Pair<String,Integer>, Integer> map, String key) {
      return map.entrySet()
                .stream()
                .filter(e -> e.getKey().getKey().equals(key))
                .map(Map.Entry::getValue)
                .collect(Collectors.toCollection(ArrayList::new));
}

答案 1 :(得分:0)

你只需要在流的末尾添加一个收集器,如:

wordTopic.entrySet()
            .stream()
            .filter(e -> e.getKey().getKey().equals(key))
            .mapToInt(Map.Entry::getValue)
            .collect(Collectors.toList());

然后你去