Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取列表中LinkedHashMap中项目的索引?_Java_Dictionary_Arraylist_Java 8_Java Stream - Fatal编程技术网

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("");