2016-04-08 24 views
0

Küçük bir sorunum var, yani Integer'u String'dan lambda ifadesiyle almak istiyorum. Küçük kod yazdım ama sadece tek karakterleri aldım.Tamsayı, Dizin aracılığıyla Lambda ifadesi

Örnek:

String = "He11o W00rld" 

Ben [1, 1, 0, 0] olsun ama [11, 00] istiyorum. Bunun için herhangi bir çözüm var mı?

Kodum:

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

Eğer lambda ifadesi ile bunu yapmak gerekir özel bir neden var? –

+0

Evet, çalışma alıştırmaları için şunu yapmalıyım ... – Patrykos

+1

['Pattern # splitAsStream()'] 'a bir göz atın (https://docs.oracle.com/javase/8/docs/api/java/util/regex /Pattern.html#splitAsStream-java.lang.CharSequence-) –

cevap

2

Sen yapabilirsiniz:

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

Çok teşekkürler, çözümünüz çalışıyor! – Patrykos

4

Aşağıdaki lambda kullanabilirsiniz: Burada

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

normal ifade tarafından verilen bir giriş böler Pattern.splitAsStream() akışı jeneratör kullanılır. Daha sonra her parça boş değilse ve Integer'a dönüştürülürse kontrol edilir. Eğer 00 yerine 0 ait gerekiyorsa

Ayrıca, bir numara ayrıştırmak olmamalıdır (Integer::parseInt eşleme atlayıp List<String> için toplamak).