用户可以在我创建的搜索字段中输入任何内容。我想从现有的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);
}
}
,但这只是一种找不到具有该名称的地方的低效方式。
答案 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。