2016-04-08 5 views
0

私は小さな問題があります。つまり、Integerをラムダ式でStringから取得したいと考えています。私は小さなコードを書いたが、私はただ一つの文字を得る。ラムダ式による文字列の整数

例:

String = "He11o W00rld" 

私は[1, 1, 0, 0]を取得するが、私は[11, 00]をしたいです。これにはどんな解決策がありますか?

マイコード:

Function<String, List<Integer>> collectInts = f -> { 
    return f.chars() 
      .filter(s -> (s > 47 && s < 58)) 
      .map(r -> r - 48) 
      .boxed() 
      .collect(Collectors.toList());}; 
+0

あなたはラムダ式でそれを行う必要があり、任意の特定の理由は? –

+0

はい、私は勉強のためにこれを行う必要があります... – Patrykos

+1

['Pattern#splitAsStream()'](https://docs.oracle.com/javase/8/docs/api/java/util/regex /Pattern.html#splitAsStream-java.lang.CharSequence-) –

答えて

2

あなたは行うことができます。

Stream.of(f.split("[^\\d]+")) 
    .filter(s -> !s.isEmpty()) // because of the split function 
    .map(Integer::parseInt) 
    .collect(toList()) 
+0

ありがとう、あなたのソリューションは動作します! – Patrykos

4

あなたは、次のラムダ使用することができます:ここで

Function<String, List<Integer>> collectInts = s -> 
    Pattern.compile("[^0-9]+") 
      .splitAsStream(s) 
      .filter(p -> !p.isEmpty()) 
      .map(Integer::parseInt) 
      .collect(Collectors.toList()); 

は、正規表現で指定された入力を分割Pattern.splitAsStream()ストリームジェネレータを、使用されています。次に、各部分が空でないかどうかチェックされ、Integerに変換されます。あなたが00代わりの0が必要な場合

ほかに、あなたは(Integer::parseIntマッピングをスキップしてList<String>に収集)の数を解析するべきではありません。