Вы можете сделать это следующим образом:
Map<String, List<String>> result1 = Arrays.stream(testPairs)
.collect(Collectors.groupingBy(Pair::getS,
Collectors.mapping(Pair::getT, Collectors.toList())));
Map<String, String> result2 = Arrays.stream(testPairs)
.collect(Collectors.toMap(Pair::getS, Pair::getT, (v1, v2) -> v1));
Если вы используете типы строк с массивами, вот версия с необходимыми приведениями, как указано в приведенном ниже комментарии YCF_L.
Map<String, List<String>> result1 = Arrays.stream(testPairs)
.collect(Collectors.groupingBy(p -> (String) p.getKey(),
Collectors.mapping(p -> (String) p.getValue(), Collectors.toList())));
Map<String, String> result2 = Arrays.stream(testPairs)
.collect(Collectors.toMap(
p -> (String) p.getKey(),
p -> (String) p.getValue(),
(a, b) -> b)
);
}