Я понимаю, почему вы хотите сделать что-то подобное, но это выглядит очень глупо. Я уверен, что если вы сообщите нам, чего вы пытаетесь достичь, мы сможем предоставить вам лучший дизайн. В любом случае, с 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
.