簡體   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