Список пересечений между ключами HashMap и заданным списком - PullRequest
1 голос
/ 15 апреля 2020

Это простая проблема. У меня есть HashMap из String и Double. Это игрушечный пример.

HashMap<String, Double> hm = new HashMap<String, Double>();
hm.put("a", 2.0);
hm.put("b", 4.0);
hm.put("c", 1.0);
hm.put("d", 3.0);

Если у меня есть список tokensList, например, [b,d]. Может, я получаю список, который является пересечением между элементами списка и ключами hashmap.

То, что я пробовал, работает. Но есть ли встроенный функционал, который мне не хватает.

List<String> newList = new ArrayList<String>();
for (String word : tokensList) {
    if (hm.containsKey(word.trim())) {
        newList.add(word);
    }
}

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Вы можете использовать List::retainAll.

List<String> newList  = new ArrayList<>(hm.keySet());
newList.retainAll(tokensList);
2 голосов
/ 15 апреля 2020

Потоковая передача набора ключей карты, добавление фильтра, включающего только значения в hm2, а затем сбор в список. Java потоки очень пригодятся.

HashMap<String,Double> hm = new HashMap<String,Double>();
hm.put( "a", 2.0 );
hm.put( "b", 4.0 );
hm.put( "c", 1.0 );
hm.put( "d", 3.0 );

List<String> hm2 = Arrays.asList( "b", "d" );

List<String> intersection = 
        hm
        .keySet()                               // Fetch all the keys in the map.
        .stream()                               // Make a stream of those keys.
        .filter( key -> hm2.contains( key ) )   // Ignore keys not found in the list.
        .collect( Collectors.toList() );        // Collect the filtered items into a list.

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