从HashMap中获取某些值并创建它们的列表

时间:2017-05-16 17:43:01

标签: java

用户可以在我创建的搜索字段中输入任何内容。我想从现有的HashMap中选择与用户输入的名称相同的值,并将它们放在列表中。

我尝试过类似的东西,但它显然需要预先存在的HashMap的所有值:

ArrayList<Object> list = new ArrayList<Object>(map.values());

我的目标是创建一个地图,其中包含用户输入的字符串作为键,以及包含与值同名的对象的列表。

编辑:

KEY和VALUE:键是具有X和Y坐标的点类,值是Place类,基本上是具有名称的位置。 Map Point,放置allPlaces = ..

我想找到与用户输入搜索字段同名的对象。

现在我正在遍历整个HashMap:

Iterator<Map.Entry<Position, Place>> iterator = 
allPlaces.entrySet().iterator();

            while(iterator.hasNext()){
                Place place = (Place)iterator.next().getValue();
                place.setUnMarked();
                if (place.getName().equals(searchField.getText()) && 
           (place.isVisible()==false || place.isVisible())){
                    place.setMarked();
                    place.setVisible(true);
                    markedPlaces.add(place);
                }
            }

,但这只是一种找不到具有该名称的地方的低效方式。

2 个答案:

答案 0 :(得分:0)

  

用户可以在我创建的搜索字段中输入任何内容。一世   想要从我现有的 HashMap 中选择具有相同值的值   命名为用户输入的内容并将其放入列表中。

HashMap只能为1个唯一键设置1个值。 除非它是HashMap<String,Collection<?>>,否则每个键只有一个值,所以没有任何东西可以收集。如果是,那么你可以开箱即用。

如果您正在谈论用户输入是多键选择,只需迭代键,添加到数组,甚至更好,使用Java8流API

HashMap<String,String> values= my hashmap
List<String> input = userinput keywords

List<String> result=input.stream().map(values::get).collect(Collections.toList());

答案 1 :(得分:0)

你不能比迭代值和将你的字段与某些字符串进行比较更有效率,因为HashMap查找的工作方式不是键值。

如果可以确保1:1映射,则可以使用BidiMap