Просто используйте слияние, которое получит первый (в порядке встречи) результат в случае обнаружения дубликата:
Collection<String> result = Stream.of("foo=X", "bar=Y", "foo=Z", "bar=M", "test=12")
.collect(Collectors.toMap(
x -> x.split("=")[0],
Function.identity(),
(left, right) -> left,
LinkedHashMap::new))
.values();
System.out.println(result); // [foo=X, bar=Y, test=12]
Я использовал LinkedHashMap
на тот случай, если вам нужно сохранить первоначальный порядок, если вам это не нужно, просто используйте:
Collection<String> result = Stream.of("foo=X", "bar=Y", "foo=Z", "bar=M", "test=12")
.collect(Collectors.toMap(
x -> x.split("=")[0],
Function.identity(),
(left, right) -> left))
.values();
System.out.println(result); // [bar=Y, test=12, foo=X]