Разделить поток списка на карту нужен специальный коллектор?

FlascheLeer спросил: 13 октября 2017 в 06:53 в: java

Я новичок в Stream, но не так много ... это моя проблема:

У меня есть список, который я читаю с ПК, где у меня есть пользователи с какими-то правами поверх исполняемого файла ... список, который я получил в виде строки, выглядит как

List<String> xyzList = new ArrayList<>();
xyzList.add("USER1.READ");
xyzList.add("USER1.WRITE");
xyzList.add("USER1.EXECUTE");
xyzList.add("USER1.DELETE");
xyzList.add("USER2.READ");
xyzList.add("USER3.READ");
xyzList.add("USER2.EXECUTE");

Я хотел бы иметь Map<String, String> наподобие

{USER1 = READ-WRITE-EXECUTE-DELETE, USER2 = READ-WRITE, USER3 = READ}

, но мой код производит:

{USER1=USER1.READ-USER1.WRITE-USER1.EXECUTE-USER1.DELETE,  USER2=USER2.READ-USER2.EXECUTE, USER3=USER3.READ}

Я знаю, что могу редактировать набор значений, если я решу продолжать работать с этим результатом, но ищу более элегантный способ получить это только в одной инструкции потока, и у меня есть ощущение, что для этого мне понадобится собственный коллектор ...

моя попытка до сих пор ..

Map<String, String> result = xyzList
        .stream()
        .collect(
             Collectors.groupingBy(x -> x.split("\\.")[0],  
             Collectors.joining("-", "", "")
         ));System.out.println(result);

есть предложения?

0 ответов