java transmitir números individuales a un rango

user1450410:

Quiero transformar pares de números a una serie de números enteros para que pueda realizar funciones en ellos. por ejemplo cada una de estas líneas:

1-4
5-6
1-2
4-7

debe ser transformada a la matriz, es decir: [1,2,3,4]. mi objetivo es hacer un recuento del número más frecuente. Estoy tratando de hacerlo como el ejemplo de recuento de palabras, pero el problema es cómo crear la corriente van desde los dos números en cada línea?

Path path = Paths.get(args[0]);
    Map<String, Long> wordCount = Files.lines(path)
            .flatMap(line -> Arrays.stream(line.trim().split("-")))
            .
            .map(word -> word.replaceAll("[^a-zA-Z]", "").toLowerCase().trim())
            .filter(num -> num.length() > 0)
            .map(number -> new SimpleEntry<>(number, 1))
            .collect(Collectors.groupingBy(SimpleEntry::getKey, Collectors.counting()));
ernest_k:

La siguiente tubería divide cada línea en -, a continuación, utiliza IntStreampara crear un rango de números entre los dos.

El resultado es una corriente de aplanar de todos estos números enteros interiores, seguido por un grupo de recuento por (número). El máximo "recuento" se encuentra a continuación, en los valores de este mapa.

String s = "1-4\n" + "5-6\n" + "1-2\n" + "4-7"; //simpler version with inline text

Optional<Entry<Integer, Long>> result = 
    Stream.of(s.split("\n")) //replace with Files.lines(path) for real stream
    .map(line -> line.split("-"))
    .map(array -> new int[] { Integer.parseInt(array[0].trim()), 
                              Integer.parseInt(array[1].trim()) })
    .map(array -> IntStream.rangeClosed(array[0], array[1]))
    .flatMapToInt(Function.identity())
    .boxed()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    .entrySet()
    .stream()
    .max(Comparator.comparingLong(Entry::getValue));

result.ifPresent(System.out::println);

Con su ejemplo de datos, imprime 1=2( 1encontrado 2 veces) - hay muchos valores que se encuentran exactamente el doble.

Supongo que te gusta

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