Рубрики
Без рубрики

Как преобразовать набор в список на Java

Как преобразовать набор в список на Java. Набор-это неупорядоченная коллекция, в то время как список упорядочен. Узнайте о 5 различных способах преобразования набора в список на Java.

Автор оригинала: Pankaj Kumar.

Списки в Java представляют собой упорядоченный набор данных, где активы представляют собой неупорядоченный набор данных. В списке могут быть повторяющиеся записи, в наборе-нет. Обе структуры данных полезны в разных сценариях.

Полезно знать, как преобразовать набор в список. Он может преобразовывать неупорядоченные данные в упорядоченные данные.

Инициализация набора

Давайте инициализируем набор и добавим в него некоторые элементы.

import java.util.*;

public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);
        System.out.println(a);
    }
}

Метод add() HashSet добавляет элементы в набор. Обратите внимание, что элементы различны. Невозможно получить элементы в соответствии с порядком их вставки, так как наборы неупорядочены.

Преобразование набора в список на Java

Давайте преобразуем набор в список. Для этого существует несколько способов. Каждый способ отличается от другого, и эти различия неуловимы.

1. Конструктор списка с установленным аргументом

Самый простой способ преобразовать набор в список – передать набор в качестве аргумента при создании списка. Это вызывает конструктор , и с этого момента конструктор позаботится обо всем остальном.

import java.util.*;

public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr = new ArrayList<>(a);
     System.out.println(arr);
     System.out.println(arr.get(1));

    }
}

Поскольку набор был преобразован в список, элементы теперь упорядочены. Это означает, что мы можем использовать метод get() для доступа к элементам по индексу.

2. Использование обычной петли для

Мы можем использовать старый добрый цикл for для явного копирования элементов из набора в список.

import java.util.*;

public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr = new ArrayList<>(a);
        for (int i : a)
            arr.add(i);
        System.out.println(arr);
        System.out.println(arr.get(1));
    }   
}

Цикл For проходит по заданному элементу за элементом и добавляет элементы в список.

3. Метод добавления списка()

В списках есть метод add All (), который добавляет в список сразу несколько значений. Возможно, вы помните эту операцию по ее использованию при объединении двух списков. addAll() также работает для добавления элементов набора в список.

import java.util.*;

public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr = new ArrayList<>();
        arr.addAll(a);
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

4. Метод сбора API потока()

Stream.collect() доступен с Java 8 и далее. ToList коллектор собирает все элементы потока в экземпляр списка.

import java.util.*;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr;

        arr = a.stream().collect(Collectors.toList());
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

В документации для stream.collect() упоминается, что нет никакой гарантии в отношении типа, изменчивости, сериализуемости или потокобезопасности возвращаемого списка. Если требуется больший контроль над возвращаемым списком, используйте toCollection(Поставщик).

Чтобы указать тип списка, используйте toCollection(ArrayList::новый)

import java.util.*;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr;

  arr = a.stream().collect(Collectors.toCollection(ArrayList::new));
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

Рекомендуемое чтение : Потоки на Java

5. Метод List.copyOf()

В списке Java 10 далее есть метод copyOf () . Метод возвращает неизменяемый список , содержащий элементы данной коллекции, в порядке итерации. Список не может содержать никаких нулевых элементов. В случае, если набор содержит “null”, метод возвращает исключение нулевого указателя.

import java.util.*;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);

     List arr;

        arr = List.copyOf(a);
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

Добавление нуля в набор и попытка преобразования в список:

import java.util.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);
        a.add(null);

     List arr;

        arr = List.copyOf(a);
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

Если вы попытаетесь добавить элемент в неизменяемый список, вы получите сообщение об ошибке, которое выглядит следующим образом.

Использование метода addAll() для преобразования набора с нулевым элементом в список:

import java.util.*;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args)
    {
        Set a = new HashSet<>();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(1);
        a.add(null);

     List arr = new ArrayList<>();
     arr.addAll(a);

      //  arr = List.copyOf(a);
        System.out.println(arr);
        System.out.println(arr.get(1));
    }
}

Обратите внимание, что значение null отображается в начале списка.

Вывод

Мы видели несколько действительно интересных методов преобразования набора в список. Важно обратить внимание на тип списка, который создается из каждого метода. Например, метод copyOf() создает неизменяемый список и не может обрабатывать нулевые элементы. В то время как stream.collect() ничего не гарантирует. Конструктор и добавить все() являются наиболее надежными среди пакетов.