Как мне получить индекс элемента в LinkedHashMap в списке? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть эта карта

Map<String, List<OrderLine>> productsNeeded = new LinkedHashMap<>();

и я хочу найти в Списке (ах) Предмет, а затем получить Ключ Списка, в котором был найден Предмет.

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Вы можете сделать это с Streams в Java 8+.Я упростил это, сделав внутренний ключ List<String>:

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

, где вы можете поместить что-то еще в значение по умолчанию orElse.

1 голос
/ 25 марта 2019

Вы можете попробовать это:

 productsNeeded.entrySet().stream()
    .filter(e -> e.getValue()
    .contains(matchingElement))
    .map(Map.Entry::getKey)
    .findFirst();

При условии, что matchingElement - это объект типа OrderLine, который вы ищете.Здесь вы получаете Optional.Чтобы получить значение, вы можете позвонить get или orElse, чтобы указать значение по умолчанию, например:

 productsNeeded.entrySet().stream()
    .filter(e -> e.getValue()
    .contains(matchingElement))
    .map(Map.Entry::getKey)
    .findFirst().orElse(null);
...