2016-10-09 12 views
0

私はここ数時間、この小さな問題を解決しようとしました。 は、私が使用してtxtファイルから読みたい:stringarrayをグループ化するにはどうすればいいですか?

Stream<String> stream = Files.lines(Paths.get(fileName))

入力は次のようになります。

b -> l; 
c -> a; 
a -> d;  
c -> l; 

今、私はこのようにそれをマップしたいです。

{a,=d, b=l, c=[a,l]} 

Iは、JavaストリームAPIでこれを行うことを試みた:

stream.map(x->x.split(" -> ")).collect(Collectors.toMap(x->x[0], 

X-> X [1]))。

問題は、重複するキーがある場合、toMapは例外をスローします。

重複するキーを許可し、その値をリストに格納する方法はありますか。

+1

(http://stackoverflow.com/questions/39882599/java-stream-collectors-tomap-value-is-a-setの重複)コレクタとして使用groupingBy。 – Nevay

答えて

1

あなたが行う必要があるのは、適切なマッピングでgroupingByを使用することだけです。

Map<String, Set<String>> result = list.stream().map(it -> it.split(" -> ")). 
    collect(Collectors.groupingBy(t -> t[0], 
    Collectors.mapping(strings -> strings[1], Collectors.toSet()))); 
関連する問題