2017-08-16 5 views
2

このコードは、mylistからmylist2にすべての要素を追加します。ストリームに複数のコンマ区切りの値が含まれている場合は、分割する

カンマを見つけて区切る場合、どのように要素を追加するように変更できますか?

ArrayList<String> mylist = new ArrayList<String>(); 
mylist.add("test"); 
mylist.add("test2, test3"); 
ArrayList<String> mylist2 = new ArrayList<String>(); 

mylist.stream() 
    .forEach(s -> mylist2.add(s)); 

mylist2.stream().forEach(System.out::println); 

ので、電流出力は次のようになります。

test 
test2, test3 

と私は含まれており、その後、印刷するために、第2のArrayListを必要とする:私は、Java 8のフィルタがいることを知っている

test 
test2 
test3 

.filter(p -> p.contains(",")... 何かを分けることができますか?

答えて

2

あなたは、各文字列とflatMapは、結果の配列はsplitできます

mylist.stream() 
     .flatMap(x -> Arrays.stream(x.split(", "))) 
     .forEach(System.out::println); 
1

あなたが使用することができます。

mylist.forEach(str -> mylist2.addAll(Arrays.asList(str.split("\\s*,\\s*")))); 

出力

test 
test2 
test3 
4

あなたは含めflatMapを行うことができますPattern::splitAsStream

Pattern splitAtComma = Pattern.compile("\\s*,\\s*"); 
List<String> myList2 = mylist.stream().flatMap(splitAtComma::splitAsStream) 
         .collect(Collectors.toList()); 
1

のような、私は含まれており、その後、印刷するために、第2のArrayListを必要とする:

次の2つのストリームを作成できます。ターゲットリストと、それを表示するための別のものを作成するためのものを。

List<String> list2 = mylist.stream() 
    .flatMap(x -> Arrays.stream(x.split(", "))) 
    .collect(Collectors.toList()); 

list2.stream().forEach(System.out::println); 

または出力へのストリームの要素をpeak()を用いて一つのストリームとListに収集する前に:

List<String> list2 = mylist.stream() 
    .flatMap(x -> Arrays.stream(x.split(", "))) 
    .peek(System.out::println) 
    .collect(Collectors.toList()); 
関連する問題