Dividir una lista en dos mitades en Java

Aquí se nos da una lista y la tarea es dividirla en dos listas de noticias, como se puede percibir mejor en la siguiente ilustración:

Ilustración:

Input  : list = {1, 2, 3, 4, 5, 6}
Output : first = {1, 2, 3}, second = {4, 5, 6}

Input  : list = {1, 2, 3, 4, 5}
Output : first = {1, 2}, second = {3, 4, 5}

Métodos: 

  1. Uso de bucles (enfoque ingenuo)
  2. Usando el método subList() de la clase List
  3. Usando el método de partición By() de la clase Collectors
  4. Uso de la biblioteca de guayaba de Google

Analicemos los métodos definidos anteriormente para obtener detalles junto con la implementación a través de programas java limpios de la siguiente manera:

Método 1: usar bucles

Acercarse:

  1. Cree dos nuevas listas vacías y asigne el primer medio elemento de la lista original.
  2. Restablecer en la segunda lista vacía.

Ejemplo:

Java

// Java Program to Split a List into Two Sublist
 
// Importing required classes
import java.util.ArrayList;
import java.util.List;
 
// Main class
public class GFG {
 
    // Method 1
    // To split a list into two sublists in Java
    public static List[] split(List<String> list)
    {
 
        // Creating two empty lists
        List<String> first = new ArrayList<String>();
        List<String> second = new ArrayList<String>();
 
        // Getting size of the list
        // using size() method
        int size = list.size();
 
        // Step 1
        // (First size)/2 element copy into list
        // first and rest second list
        for (int i = 0; i < size / 2; i++)
            first.add(list.get(i));
 
        // Step 2
        // (Second size)/2 element copy into list first and
        // rest second list
        for (int i = size / 2; i < size; i++)
            second.add(list.get(i));
 
        // Returning a List of array
        return new List[] { first, second };
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an ArrayList of string type
        List<String> list = new ArrayList<String>();
 
        // Adding elements to list object
        // using add() method
        list.add("Geeks");
        list.add("Practice");
        list.add("Contribute");
        list.add("IDE");
        list.add("Courses");
 
        // Calling split method which return List of array
        List[] lists = split(list);
 
        // Printing specific elements of list by
        // passing arguments with in
        System.out.println(lists[0]);
        System.out.println(lists[1]);
    }
}
Producción

[Geeks, Practice]
[Contribute, IDE, Courses]

Método 2: Usar el método subList() de la clase List

Devuelve una vista de la parte de esta lista entre el índice especificado (incluir) y otro índice (excluir). Por ejemplo, tomemos arbitrariamente de 2 a 5, Aquí el índice 2 incluirá solo. En caso de que ambos índices especificados sean iguales, la lista devuelta está vacía. List.subList() devolvió una lista, por lo que los cambios no estructurales en la lista devuelta.

Ejemplo:

Java

// Java Program to Split a List into Two SubList
// Using subList() method of List clas
 
// Importing required classes
import java.util.ArrayList;
import java.util.List;
 
// Main class
public class GFG {
 
    // Method 1
    // To split a list into two sublists in Java
    public static List[] split(List<String> list)
    {
 
        // Finding the size of the list using List.size()
        // and putting in a variable
        int size = list.size();
 
        // Creating new list and inserting values which is
        // returned by List.subList() method
        List<String> first
            = new ArrayList<>(list.subList(0, (size) / 2));
        List<String> second = new ArrayList<>(
            list.subList((size) / 2, size));
 
        // Returning an List of array
        return new List[] { first, second };
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creatingan ArrayList of String type
        List<String> list = new ArrayList<String>();
 
        // Adding elements to List object
        // Custom input elements
        list.add("Geeks");
        list.add("Practice");
        list.add("Contribute");
        list.add("IDE");
        list.add("Courses");
 
        // Calling split method which return List of array
        List[] lists = split(list);
 
        // Printing specific elements of list by
        // passing arguments with in
        System.out.println(lists[0]);
        System.out.println(lists[1]);
    }
}
Producción

[Geeks, Practice]
[Contribute, IDE, Courses]

Método 3: Usar el método de particiónBy() de la clase Collectors 

Java 8 Collectors.partitioningBy() es un método que divide los elementos de flujo siempre en dos partes, a diferencia de Naive y List.subList(). Devuelve un Collector que almacena los valores en un Map. La clave del mapa solo puede estar en booleano.

Sintaxis: método de partición por() 

public static  Collector<T, ?, Map<Boolean, List>> 
partitioningBy(Predicate predicate)

Ejemplo:

Java

// Java Program to Split a List into Two Sub-List
/// Using partitioningBy() method of Collectors class
 
// Importing required classes
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
// Main class
public class GFG {
 
    // Method 1
    // To split a list into two sublists in Java
    public static List[] split(List<String> list)
    {
 
        // Setting value of midIndex using comparators
        int midIndex
            = ((list.size() / 2)
               - (((list.size() % 2) > 0) ? 0 : 1));
 
        // Creating object of List with reference to
        // ArrayList class Declaring object List<String>
        // type
        List<List<String> > lists = new ArrayList<>(
            list.stream()
                .collect(Collectors.partitioningBy(
                    s -> list.indexOf(s) > midIndex))
                .values());
 
        // Returning an array containing both lists
        return new List[] { lists.get(0), lists.get(1) };
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an ArrayList of String type
        List<String> list = new ArrayList<String>();
 
        // Adding elements to List object
        // Using add() method
        list.add("Geeks");
        list.add("Practice");
        list.add("Contribute");
        list.add("IDE");
        list.add("Courses");
 
        // Calling split method which return List of array
        List[] lists = split(list);
 
        // Printing specific elements of list by
        // passing arguments with in
        System.out.println(lists[0]);
        System.out.println(lists[1]);
    }
}
Producción

[Geeks, Practice, Contribute]
[IDE, Courses]

Método 4: Uso de la biblioteca de guayaba de Google  

Guava es una biblioteca de código abierto basada en Java desarrollada por Google Inc. En la biblioteca Guava, podemos usar el método Lists.partition() que divide la lista en sublistas consecutivas, cada lista de tamaño especificado. Para dividir la lista en dos sublistas, en nuestro caso, podemos pasar el tamaño que es igual a la mitad del tamaño de nuestra lista.

Ejemplo 

Java

// Java Program to Split a List into Two Sub-List
 
// Importing Guava library
import com.google.common.collect.Iterables;
// Importing required classes
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
// Main class
public class GFG {
 
    // Method 1
    // To split a list into two sublists in Java
    public static List[] split(List<String> list)
    {
 
        // Partition the List into two sublists and
        // getting iterator
        Iterator<List<String> > itr
            = Iterables.partition(list, (list.size()) / 2)
                  .iterator();
 
        // Returning an array containing both lists
        return new List[] { new ArrayList<>(itr.next()),
                            new ArrayList<>(itr.next()) };
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an ArrayList of string type
        List<String> list = new ArrayList<String>();
 
        // Adding elements t oabove object
        // Custom input elements
        list.add("Geeks");
        list.add("Practice");
        list.add("Contribute");
        list.add("IDE");
        list.add("Courses");
 
        // Calling split method which return List of array
        List[] lists = split(list);
 
        // Printing specific elements of list by
        // passing arguments with in
        System.out.println(lists[0]);
        System.out.println(lists[1]);
    }
}
Producción

[Geeks, Practice]
[Contribute, IDE]

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji 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 *