Java 如何获取列表中LinkedHashMap中项目的索引?
我有这张地图Java 如何获取列表中LinkedHashMap中项目的索引?,java,dictionary,arraylist,java-8,java-stream,Java,Dictionary,Arraylist,Java 8,Java Stream,我有这张地图 Map<String, List<OrderLine>> productsNeeded = new LinkedHashMap<>(); Map productsNeed=新建LinkedHashMap(); 我想在列表中搜索某个项目,然后获取找到该项目的列表的键。您可以尝试以下操作: productsNeeded.entrySet().stream() .filter(e -> e.getValue() .conta
Map<String, List<OrderLine>> productsNeeded = new LinkedHashMap<>();
Map productsNeed=新建LinkedHashMap();
我想在列表中搜索某个项目,然后获取找到该项目的列表的键。您可以尝试以下操作:
productsNeeded.entrySet().stream()
.filter(e -> e.getValue()
.contains(matchingElement))
.map(Map.Entry::getKey)
.findFirst();
假设matchingElement
是您要查找的OrderLine
类型的对象。在这里您可以获得可选的。要获取值,可以调用get
或orElse
以提供默认值,例如:
productsNeeded.entrySet().stream()
.filter(e -> e.getValue()
.contains(matchingElement))
.map(Map.Entry::getKey)
.findFirst().orElse(null);
您可以使用Java 8+中的流
实现这一点。我将内键设置为一个列表
,从而简化了这一过程:
String item=”“;
Map ProductsNeed=新建LinkedHashMap();
字符串键=ProductsNeed.entrySet().stream()
.filter(e->e.getValue().stream().anyMatch(项::等于))
//或e->e.getValue().contains(项目)
.map(条目::getKey)
.findFirst()
.orElse(“”);
您可以在默认值orElse
中放置其他内容,您想获取键还是索引?如果您想要键,这是一个糟糕的映射使用,您最好使用BiMap。您应该真正使用映射而不是映射:映射用于按键查找值,反之亦然。
String item = "";
Map<String, List<String>> productsNeeded = new LinkedHashMap<>();
String key = productsNeeded.entrySet().stream()
.filter(e -> e.getValue().stream().anyMatch(item::equals))
//Or e -> e.getValue().contains(item)
.map(Entry::getKey)
.findFirst()
.orElse("");