Удаление элементов из древовидной карты - PullRequest
1 голос
/ 28 апреля 2019

Я написал код, который принимает массив целых чисел, и я не могу найти способ удалить элементы treemap, которые получили (false) значение.Любая помощь будет оценена.код как.

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner s=new Scanner(System.in);
        int x=s.nextInt();
        String[] str=new String[x];
        for(int i=0;i<x;i++)
        {
            str[i]=s.next();
        }
        TreeMap<Character, Boolean> store=new TreeMap<Character, Boolean>();
        for(int i=0;i<str[0].length();i++)
        {
            store.put(str[0].charAt(i), false);
        }
        for(int i=1;i<str.length;i++)
        {
            for(int j=0;j<str[i].length();j++)
            {
                if(store.containsKey(str[i].charAt(j)))
                {
                    store.put(str[i].charAt(i), true);
                }
            }
                //code for removing elements from treemap with false value.
        }
    }
}

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Не существует эффективного способа найти все записи Map, имеющие заданное значение, и удалить их.Чтобы сделать это, вам придется перебрать все записи.

Однако вам не нужно это делать.Просто избегайте помещать их в Map.Вместо того, чтобы помещать символы первого String со значением false в Map, поместите их в отдельный Set:

Map<Character, Boolean> store = new TreeMap<>();
Set<Character> set = new TreeSet<>();
for(int i=0;i<str[0].length();i++)
{
    set.add(str[0].charAt(i));
}
for(int i=1;i<str.length;i++)
{
    for(int j=0;j<str[i].length();j++)
    {
        if(set.contains(str[i].charAt(j)))
        {
            store.put(str[i].charAt(i), true);
        }
    }
}
0 голосов
/ 28 апреля 2019

Если у вас есть TreeMap и вы хотите удалить все ложные значения, вы можете добиться этого с помощью oneliner, используя лямбда-выражения в Java 8.

map.entrySet().removeIf(entry -> !entry.getValue()); // getValue() will return a boolean
...