¿Por qué necesito para mapear IntStream para transmitir <carácter>

mancocapac:
  public static int construction(String myString) {
      Set<Character> set = new HashSet<>();

      int count = myString.chars()  // returns IntStream
      .mapToObj(c -> (char)c)       // Stream<Character> why is this required?
      .mapToInt(c -> (set.add(c) == true ? 1 : 0)) // IntStream
      .sum();

      return count;
    }

El código anterior no se compilará sin:

.mapObj(c -> (char)c)
// <Character> Stream<Character> java.util.stream.IntStream.mapToObj(IntFunction<? extends Character> mapper)

Si quito, me sale el siguiente error

The method mapToInt((<no type> c) -> {}) is undefined for the type IntStream

Alguien puede explicar esto? Parece que estoy empezando con y IntStream, la conversión a un flujo de caracteres y luego de vuelta a IntStream.

Nikolas:

El método CharSequence::charsdevuelve el IntStream, que por supuesto no proporciona ningún método para la conversión de int, tal como mapToInt, pero mapToObjen su lugar. Por lo tanto el método IntStream::map(IntUnaryOperator mapper)que tanto se lleva vuelve intasí deberá utilizarse, ya IntUnaryOperatorhace lo mismo como Function<Integer, Integer>o UnaryOperator<Integer>:

int count = myString.chars()                 // IntStream
    .map(c -> (set.add((char) c) ? 1 : 0))   // IntStream
    .sum();

long count = myString.chars()                // IntStream
    .filter(c -> set.add((char) c))          // IntStream
    .count();

Además, el uso Set<Integer>ayuda a evitar la conversión a un personaje:

Set<Integer> set = new HashSet<>();

int count = myString.chars()                 // IntStream
    .map(c -> (set.add(c) ? 1 : 0))          // IntStream
    .sum();

long count = myString.chars()                // IntStream
    .filter(set::add)                        // IntStream
    .count();

Sin embargo, independientemente de lo que se intenta lograr, su código es erróneo por principio, los comportamientos NO sin estado para ser exactos. Considere el uso de la siguiente fragmento de la cual los resultados lambda expresiones no son dependientes en el resultado de una operación no determinista, tal como Set::add.

resultados de tuberías de flujo pueden no determinista o incorrecta si los parámetros de comportamiento para las operaciones de secuencias son con estado.

long count = myString.chars()             // IntStream
                     .distinct()          // IntStream
                     .count();

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173016&siteId=1
Recomendado
Clasificación