Нужно подумать пошагово:
- Перебор пар первого уровня. Карта
- для каждого, итерация по его паре (Карта второго уровня)
- если вы найдете пару с хорошим
isbn
, сохраните идентификатор карты 1-го уровня
Вы можете построить метод следующим образом и вызывать так
List<Integer> listId = getIdFromIsbn("123", map);
static List<Integer> getIdFromIsbn(String isbn, Map<Integer, Map<String, Integer>> map) {
List<Integer> list = new ArrayList<>();
for (Map.Entry<Integer, Map<String, Integer>> entry : map.entrySet()) {
Map<String, Integer> value = entry.getValue();
for (Map.Entry<String, Integer> subEntry : value.entrySet()) {
if (subEntry.getKey().equals(isbn)) {
list.add(entry.getKey());
}
}
}
return list;
}
Используя Stream
и лямбды, это будет выглядеть так:
static List<Integer> getIdFromIsbn(String isbn, Map<Integer, Map<String, Integer>> map) {
return map.entrySet() // Set<Entry<Integer,Map<String,Integer>>>
.stream() // Stream<Entry<Integer,Map<String,Integer>>>
.flatMap(entry -> entry.getValue().entrySet() // Set<Entry<String,Integer>>
.stream() // Stream<Entry<String,Integer>>
.map(Map.Entry::getKey) // Stream<String>
.filter(isbn::equals) // Stream<String>
.map(subEntry -> entry.getKey())) // Stream<Integer>
.collect(Collectors.toList()); // List<Integer>
}