У меня есть два строковых аргумента для моей функции - «Пицца» и «Чипсы».Я хотел бы использовать потоки, чтобы вернуть автора, чей ключ "foods" имеет содержимое, соответствующее этим двум строкам
List<String> collection = Arrays.asList("Pizza", "Chips");
private static List<Map<String, Object>> authors = Arrays.asList(
ImmutableMap.of("id", "author-1",
"firstName", "Adam",
"lastName", "Awldridge",
"foods", Arrays.asList("Pizza", "Chips")),
ImmutableMap.of("id", "author-2",
"firstName", "Bert",
"lastName", "Bruce",
"foods", Arrays.asList("Pizza", "Fish")),
... // other authors
);
Это моя попытка с потоками:
return authors
.stream()
.filter(authors.stream()
.flatMap(author -> author.get("foods"))
.findAny(queryFoods))
.findFirst().orElse(null);
Я хочуверните первого автора, чьи продукты соответствуют моему запросу.Я думаю, что основная трудность заключается в организации данных - к сожалению, я не могу заставить работать следующий кастинг.
.flatMap(author -> (List<String>) author.get("foods"))
Кроме того, это может слишком часто передаваться авторам (я должен использовать .filter в потокеЯ только что сделал с
authors.stream()