Java.util.Arrays.parallelSetAll(), Arrays.setAll() en Java

Requisitos previos: 

ParallelSetAll y setAll se introducen en la clase Arrays en Java 8. 

  • paraleloSetAll(): establece todos los elementos en la array especificada en paralelo mediante la función que calcula cada elemento. 
    Sintaxis: 
public static void parallelSetAll(double[] arr, IntToDoubleFunction g)
Parameters :
arr :  Array to which the elements to be set 
g : It is a function that accepts index of an array 
and returns the computed value to that index
  • Variaciones: 
parallelSetAll(double[] arr, IntToDoubleFunction g)
parallelSetAll(int[] arr, IntUnaryOperator g)
parallelSetAll(long[] arr, IntToLongFunction g)
parallelSetAll(T[] arr, IntFunction g)
  • setAll() : Establece todos los elementos en la array especificada por la función que calcula cada elemento. 
    Sintaxis: 
public static void setAll(int[] arr, IntUnaryOperator g)
Parameters :
    arr :  Array to which the elements to be set
   g : It is a function that accepts index of an array 
and returns the computed value to that index
  • Variaciones: 
setAll(double[] array, IntToDoubleFunction generator)
setAll(int[] array, IntUnaryOperator generator)
setAll(long[] array, IntToLongFunction generator)
setAll(T[] array, IntFunction generator)

conjuntoParaleloTodo() frente a conjuntoTodo()

Ambas funciones producen el mismo resultado que se puede ver, pero se considera que parallelSetAll() es más rápido ya que realiza los cambios en la array en paralelo (es decir, a la vez) mientras que setAll() actualiza cada índice de la array (es decir, uno tras otro). Aunque setAll() se ejecuta más rápido en una array de menor tamaño, pero parallelSetAll() se hace cargo de setAll() cuando el tamaño de la array es mayor. 
 

Ejemplos

Veamos un ejemplo de parallelSetAll(int[] arr, IntUnaryOperator g) y setAll(int[] array, generador IntUnaryOperator) 
 

Java

// Java program to demonstrate setAll()
// and ParallelSetAll()
import java.util.Arrays;
import java.util.function.IntUnaryOperator;
class GFG
{
    public static void main(String[] args)
    {
        // Declaring arrays of integers
        int[] arr_parallel1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                                13, 14, 15, 16, 17, 18, 19, 20 };
        int[] arr_parallel2 = Arrays.copyOf(arr_parallel1, arr_parallel1.length);
        int[] arr = Arrays.copyOf(arr_parallel1, arr_parallel1.length);
 
        // Applying parallelSetAll on Array arr_parallel1
        IntUnaryOperator g = e->
        {
            if (e % 2 == 0)
                return e * e;
            else
                return e;
        };
        Arrays.parallelSetAll(arr_parallel1, g);
 
        /* Another way of passing the second argument.
        Uncomment to try .
        Arrays.parallelSetAll(arr_parallel1, e -> {
        if (e % 2 == 0)
        return e * e;
        else
        return e;
        }); */
        System.out.println("Example 1: Modifying the values at even"
        + " index and storing the square of index");
 
        // Printing the modified array
        Arrays.stream(arr_parallel1).forEach(e->System.out.print(e + " "));
 
        // Applying parallelSetAll on Array arr_parallel2
        Arrays.parallelSetAll(arr_parallel2, e->
        {
            if (arr_parallel2[e] % 2 == 0)
                return arr_parallel2[e] * arr_parallel2[e];
            else
                return arr_parallel2[e];
        });
        System.out.println("\n\nExample 2: Modifying the values when"
                        + "even value is encountered");
 
        // Printing the modified array
        Arrays.stream(arr_parallel2).forEach(e->System.out.print(e + " "));
 
        // Applying setAll on Array arr
        Arrays.setAll(arr, e->
        {
            if (e % 2 == 0)
                return e * e;
            else
                return e;
        });
        System.out.println("\n\nExample 3:setAll gives exactly "
                        + "same output as parallelSetAll");
 
        // Printing the modified array
        Arrays.stream(arr).forEach(e->System.out.print(e + " "));
    }
}

Producción: 
 

Example 1: Modifying the values at even index and storing the square of index
0  1  4  3  16  5  36  7  64  9  100  11  144  13  196  15  256  17  324  19  

Example 2: Modifying the values when even value is encountered
1  4  3  16  5  36  7  64  9  100  11  144  13  196  15  256  17  324  19  400  

Example 3:setAll gives exactly same output as parallelSetAll
0  1  4  3  16  5  36  7  64  9  100  11  144  13  196  15  256  17  324  19  

Ejemplo 2: incluso podemos pasar arrays de tipos de datos definidos por el usuario. Veamos un ejemplo de setAll(T[] array, IntFunction generator) y parallelSetAll(T[] arr, IntFunction g)
 

Java

// Java program to demonstrate setAll()
// and ParallelSetAll
import java.util.Arrays;
class GFG {
    // User Defined class Person
    static class Person {
        String name;
        int age;
 
        // constructor
    public Person(String name, int age)
        {
            this.name = name;
            this.age = age;
        }
    }
 
    public static void main(String[] args)
    {
        // Declaring Arrays of person
        Person p[] = { new Person("samir", 20),
                       new Person("anil", 25), new Person("amit", 10),
                       new Person("rohit", 17), new Person("Geek5", 19),
                       new Person("sumit", 22), new Person("gourav", 24),
                       new Person("sunny", 27), new Person("ritu", 28) };
 
        // Applying parallelSetAll on p array
        Arrays.parallelSetAll(p, e->{
            if (p[e].name.startsWith("s"))
                return new Person("You are a geek", 100);
            else
                return new Person(p[e].name, p[e].age);
        });
        System.out.println("Example 1; Modifying the name that starts with s");
 
        // Printing array elements
        Arrays.stream(p).forEach(e->System.out.println(e.name + "   " + e.age));
 
        // Declaring another array of person
        Person p1[] = { new Person("samir", 16),
                        new Person("anil", 25), new Person("amit", 10),
                        new Person("rohit", 17), new Person("Geek5", 19),
                        new Person("sumit", 16), new Person("gourav", 24),
                        new Person("sunny", 11), new Person("ritu", 28) };
 
        // Applying setAll on p1
        Arrays.setAll(p1, e->{
            if (p1[e].age < 18)
                return new Person("Teenager", p1[e].age);
            else
                return new Person(p1[e].name, p1[e].age);
        });
 
        System.out.println("\n\nExample 2: Modifying name whose"
                           + "age is less than 18");
 
        // Printing array elements
        Arrays.stream(p1).forEach(e->System.out.println(e.name + "   " + e.age));
    }
}

Producción: 
 

Example 1; Modifying the name that starts with s
You are a geek   100
anil   25
amit   10
rohit   17
Geek5   19
You are a geek   100
gourav   24
You are a geek   100
ritu   28


Example 2: Modifying name whose age is less than 18
Teenager   16
anil   25
Teenager   10
Teenager   17
Geek5   19
Teenager   16
gourav   24
Teenager   11
ritu   28

Referencia:  
https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html 
Este artículo es una contribución de Sumit Ghosh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *