Как объединить временную карту с постоянной картой, чтобы я мог записать несколько элементов одного и того же ключа? - PullRequest
0 голосов
/ 03 ноября 2018

Итак, у меня есть две карты, где ключ основан на длине слова. Когда есть слово с одинаковой длиной, я хочу, чтобы оно добавлялось к этому ключу.

Я хочу сделать это с помощью функции map.merge(), однако, посмотрев документацию, я не уверен, как это сделать. Я пытался посмотреть на другие ресурсы, но не многие помогли.

Map<Integer, String> map = new HashMap<Integer, String>();

Map<Integer, String> map = new HashMap<Integer, String>();


String[] wordsSplit = doc.split(" ");
for(int i = 0; i < wordsSplit.length; i++) {
    int key = wordsSplit[i].length();
    Map<Integer, String> tempMap = new HashMap<Integer, String>();
    tempMap.put(key, wordsSplit[i]);
    //merge here
    map.merge(key, map.keySet(), map.get(key) + ", " + wordsSplit[i]);  
}

Изменить: Этот вопрос отличается, потому что здесь я пытаюсь выяснить, как отобразить в контексте слияния временной карты на старую карту.

Например, это означает, что если есть несколько элементов, которые используют один и тот же ключ, то это будет выглядеть так: key: "Car, bar, Tar"

1 Ответ

0 голосов
/ 03 ноября 2018

Сначала вам понадобится функция слияния для объединения слов одинаковой длины, разделенных ", ";

BiFunction<String, String, String> mergeFunction = (i, j) -> {      
    return i + ", " + j;
};

Затем map.merge(key, x, mergeFunction); объединяет элементы массива wordsSplit в соответствии с их длиной. Ниже key - длина слова, x обозначает wordsSplit[i]

.
Stream.of(wordsSplit).forEach(x -> {
    int key = x.length();
    map.merge(key, x, mergeFunction);
});

Или вы можете просто передать тело функции слияния (i, j) -> { return i + ", " + j; } в map.merge() вместо отдельного определения mergeFunction:

Stream.of(wordsSplit).forEach(x -> {
    int key = x.length();
    map.merge(key, x, (i, j) -> { return i + ", " + j; });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...