繁体   English   中英

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

[英]is there a way to get values of a map of pair and value by the key pair only?

我有这张地图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();

您可以这样创建一个方法:

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();
}

给定一个映射和一个键,它将产生所有值,其中输入键等于提供的键。

或者,如果您想要一个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));
}

您只需要像这样在流的末尾添加一个收集器:

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

然后你去

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM