Java 8, Stream - Trouvez le nombre de chaînes qui ont la somme des chiffres plus de 10

Alexander Tukanov:

J'apprends java 8 et moi avons écrit le code qui trouve le nombre d'éléments de collection, qui contiennent des chaînes de chiffres avec la somme de plus de 10.

Par exemple:

« 56abc » - cette chaîne contient la somme de 11 et satisfait à la condition de la tâche

« 56 » - cette chaîne contient également la somme de 11 et satisfait à la condition de la tâche

« 12sdf » - cette chaîne contient une somme de 3 et ne Satisf pas la condition de la tâche

Mon code fonctionne, mais je pense qu'il est trop grand et mauvais. Est-il possible de faire mieux? Merci!

List<String> listString = Arrays.asList("83d","349d", "12");
Stream<String> s1 = listString.stream(); //get stream of string elements
Stream<IntStream> s2 = s1.map(x->x.chars()); //get stream of chars
Stream<Stream<Integer>> s3 = s2.map(IntStream::boxed); //convert IntStream to Stream<Integer> 
Stream<Stream<String>> s4 = s3.map(x->x.map(val->String.valueOf((char)val.intValue()))); //convert Stream<Integer> to Stream<String>
Stream<Stream<String>> s5 = s4.map(x->x.filter(val->val.matches("\\d+"))); //filter chars, that is not a digit
Stream<Stream<Integer>> s6 = s5.map(x->x.map(Integer::parseInt)); //convert String to Integer
Stream<Integer> s7 = s6.map(x->x.mapToInt(val->val).sum()); //find sum of digits
Stream<Integer> s8 = s7.filter(val->val>10); //filter sums that is less of 10
long count = s8.count(); //get count of elements
System.out.println("count = "+count);
Ils étaient les suivants:

Tout d' abord, il contrecarre le but d'attribuer à chaque intermédiaire Streamà une variable. Juste enchaîner tous les appels de méthode.

Deuxièmement, vous pouvez obtenir le même résultat que beaucoup moins d'étapes.

Pour chaque IntStreamfiltre tous les caractères qui ne sont pas entre « 0 » et « 9 », cartographier les caracteres restant à leurs valeurs numériques et les additionner.

List<String> listString = Arrays.asList("83d","349d", "12");
long count = listString.stream()
                       .map(x->x.chars())
                       .filter(x -> x.filter(i -> i >= '0' && i <= '9')
                                     .map(i -> i - '0')
                                     .sum() > 10)
                       .count();
System.out.println("count = " + count);

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=389622&siteId=1
conseillé
Classement