Создать карту из двух списков с ключом и значением как один и тот же объект - PullRequest
0 голосов
/ 04 мая 2018

У меня есть 2 списка, которые содержат объекты. Эти 2 списка могут иметь одинаковые объекты в разном порядке.

Я переопределил метод equals в Object так, что если одно конкретное свойство объекта совпадает с другим Object, тогда они равны, даже если другие свойства не совпадают.

Теперь мне нужно создать карту, где ключ - это Объект из одного списка, а значение - это тот же Объект из другого списка. Если в одном списке есть Объект, которому нет другого объекта в другом списке, эти Объекты следует игнорировать при создании Карты.

Как я могу сделать это, используя поток Java?

1 Ответ

0 голосов
/ 04 мая 2018

Я понимаю, почему вы хотите сделать что-то подобное, но это выглядит очень глупо. Я уверен, что если вы сообщите нам, чего вы пытаетесь достичь, мы сможем предоставить вам лучший дизайн. В любом случае, с Java 10 будет работать следующее:

var list1 = List.of("One", "Two", "Three");
var list2 = List.of("Two", "Three", "Four");

var set = Set.copyOf(list2);

var map = list1.stream()
               .filter(set::contains)
               .collect(Collectors.toMap(k -> k, v -> list2.get(list2.indexOf(v))));

System.out.println(map);

Выход:

{Two=Two, Three=Three}

Эквивалентный код, написанный для Java 8, выглядит следующим образом:

List<String> list1 = Arrays.asList("One", "Two", "Three");
List<String> list2 = Arrays.asList("Two", "Three", "Four");

Set<String> set = new HashSet<>(list2);

// Defined the Map here for formatting reasons.
Map<String, String> map;

map = list1.stream()
           .filter(set::contains)
           .collect(Collectors.toMap(k -> k, v -> list2.get(list2.indexOf(v))));

System.out.println(map);

Примечание : предполагается, что вы переопределили Object#hashCode, а также Object#equals.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...