¿Cómo puedo asignar más de un array en Java?

Ashton Wiersdorf:

Tengo una matriz de cadenas

String[] suffixes = getSuffixes();

y quiero una nueva matriz basada en la anterior con un prefijo anexa. Me gustaría hacer algo como esto en Ruby, JavaScript, Perl, Lisp, y similares:

// pseudocode for what I would like

String[] full_words = suffixes.map(suffix => "re" + suffix);

Yo estoy limitado a las matrices en mi solicitud. (Esta es una pequeña parte de una asignación para la escuela y no se me permite utilizar la biblioteca Colecciones.) Cualquier forma de hacer esto en Java 8?

Jachik:
String [] full_suffixes = Arrays.stream(suffixes)
                          .map(suffix -> "re" + suffix)
                          .toArray(size -> new String[size])

"Ol' de moda" bucle es demasiado detallado:

String [] full_suffixes = new String[suffixes.length];
for(int i = 0; i < suffixes.length; i++) {
    full_suffixes[i] = "re" + suffixes[i];
}

Para abordar el comentario "demasiado rápido":

import java.util.Arrays;

public class Test {
    static int N = 10000;
    public static void main(String [] args) throws Exception {
        if(args.length > 0) {
            N = Integer.parseInt(args[0]);
        }
        String [] array = new String[100000];
        for(int i = 0; i < array.length; i++) {
            array[i] = "abcdef" + i;
        }
        long start = System.currentTimeMillis();
        fancy(array);
        System.err.println("Fancy took " + (System.currentTimeMillis() - start) + "ms");
        start = System.currentTimeMillis();
        oldSchool(array);
        System.err.println("Loop took " + (System.currentTimeMillis() - start) + "ms");

    }

    public static void fancy(String [] array) {
        for(int i = 0; i < N; i++) {
            String [] full_suffixes = Arrays.stream(array)
                                          .map(suffix -> "re" + suffix)
                                          .toArray(size -> new String[size]);
        }
    }

    public static void oldSchool(String [] array) {
        for(int i = 0; i < N; i++) {
            String [] full_suffixes = new String[array.length];
            for(int j = 0; j < array.length; j++) {
                    full_suffixes[j] = "re" + array[j];
            }
        }
    }
}

Correr (JDK 1.8.0_60):

$ java Test 100
Fancy took 502ms
Loop took 398ms
$ java Test 1000
Fancy took 3067ms
Loop took 2227ms
$ java Test 5000
Fancy took 13288ms
Loop took 11494ms
$ java Test 10000
Fancy took 27744ms
Loop took 27446ms

Yo no diría que mucho más rápido, pero sí, por desgracia, hay un equilibrio entre el rendimiento y la claridad del código en la implementación actual de transmisión de marco.

Editar: Para abordar la discusión sobre un mapa vs los bucles - no se trata de HTE número de líneas o caracteres a tipo, tal vez yo también estoy arruinado por idiomas con funciones de orden superior, pero para mí hay una desconexión mental entre la transformación de una colección (que es simplemente lo que hace un mapa) y poner mi cerebro en los detalles de su tamaño y forma de obtener / elementos de asignar. También vale la pena mencionar que Java marco de streaming sigue siendo edades atrás.

Supongo que te gusta

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