Chciałbym przekształcić listę w mapę przy użyciu jako wartości kluczowych tylko dwóch wartości ciągu. Następnie jako wartości właśnie lista ciągów zawierających elementy z pozycji nieparzystej lub parzystej z listy wejściowej. Oto stary kod modowy:Przekształć listę w mapę za pomocą tylko dwóch kluczy i nieparzystych lub parzystych indeksów jako wartości - Java 8 Stream
Map<String, List<String>> map = new HashMap<>();
List<String> list = Arrays.asList("one", "two", "three", "four");
map.put("evenIndex", new ArrayList<>());
map.put("oddIndex", new ArrayList<>());
for (int i = 0; i < list.size(); i++) {
if(i % 2 == 0)
map.get("evenIndex").add(list.get(i));
else
map.get("oddIndex").add(list.get(i));
}
Jak przekształcić ten kod na język Java 8 przy użyciu strumieni, aby uzyskać ten wynik?
Moja obecna trudna próba wymaga modyfikacji elementów listy, ale zdecydowanie musi być lepszą opcją.
List<String> listModified = Arrays.asList("++one", "two", "++three", "four");
map = listModified.stream()
.collect(Collectors.groupingBy(
str -> str.startsWith("++") ? "evenIndex" : "oddIndex"));
A może ktoś mi pomoże z tym błędnym rozwiązaniem?
IntStream.range(0, list.size())
.boxed()
.collect(Collectors.groupingBy(i -> i % 2 == 0 ? "even" : "odd",
Collectors.toMap((i -> i) , i -> list.get(i)))));
który powróci w ten sposób:
{even={0=one, 2=three}, odd={1=two, 3=four}}