Вопрос прост и может быть решен тысячами способов.Но так как я изучаю Java 8, я хотел бы сделать это способом Java 8.
У меня есть два списка строк, например:
List<String> list1 = Arrays.asList("A", "B", "C", "D");
List<String> list2 = Arrays.asList("A", "D", "E");
Я хочу взять первыйэлемент из list1
и проверьте, присутствует ли строка в list2
, и выведите Map<Boolean, String>
.Примерно так:
Map<Boolean, String> resultMap = list1.stream().collect(partial -> Collectors.partitioningBy(list2.stream().filter(existing -> matchString(partial, existing))));
private static boolean matchString(String partial, String existing) {
return partial.equals(existing);
}
Приведенный выше код имеет ошибку компиляции в matchString(partial, existing)
:
Неверный 1-й тип аргумента.Найдено: '', обязательно: 'java.lang.String'
Несколько вещей, на которые стоит обратить внимание, это то, что в моем реальном сценарии это не простой список строк, а более сложный объект и этот объектне переопределяет equals
или hashcode
метод.
Я очень хорошо знаю, что это можно сделать разными способами.Но может кто-нибудь, пожалуйста, дайте мне знать, как мы используем Collectors.partitioningBy
в этом конкретном сценарии.