Есть ли способ получить значения карты пары и значения только по паре ключей? - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть эта карта static Map<Pair<String,Integer>, Integer> wordTopic = new HashMap<>(); В основном это матрица, и я хочу, чтобы все значения конкретной строки (ключ пары) .. АКА все значения одной строки ..

Это даст сумму одной строки, но я понятия не имею, как получить саму строку, каждое значение в массиве или что-то в этом роде.

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы можете создать метод следующим образом:

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));
}
0 голосов
/ 28 апреля 2018

Вы просто должны добавить коллектор в конце потока следующим образом:

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

и вот вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...