Jawaban:
Saya setuju dengan sepp2k, tetapi ada beberapa detail lain yang mungkin penting:
new HashSet<Foo>(myList);
akan memberi Anda set yang tidak disortir yang tidak memiliki duplikat. Dalam hal ini, duplikasi diidentifikasi menggunakan metode .equals () pada objek Anda. Ini dilakukan dalam kombinasi dengan metode .hashCode (). (Untuk lebih lanjut tentang kesetaraan, lihat di sini )
Alternatif yang memberikan set diurutkan adalah:
new TreeSet<Foo>(myList);
Ini berfungsi jika Foo mengimplementasikan Sebanding. Jika tidak maka Anda mungkin ingin menggunakan komparator:
Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);
Ini tergantung pada compareTo () (dari antarmuka yang sebanding) atau bandingkan () (dari pembanding) untuk memastikan keunikan. Jadi, jika Anda hanya peduli tentang keunikan, gunakan HashSet. Jika Anda setelah menyortir, pertimbangkan TreeSet. (Ingat: Optimalkan nanti!) Jika efisiensi waktu penting gunakan HashSet jika efisiensi ruang penting, lihat TreeSet. Perhatikan bahwa implementasi Set dan Peta yang lebih efisien tersedia melalui Trove (dan lokasi lainnya).
Jika Anda menggunakan perpustakaan Guava :
Set<Foo> set = Sets.newHashSet(list);
atau lebih baik:
Set<Foo> set = ImmutableSet.copyOf(list);
ImmutableSet.of()
, misalnya. EDIT: itu mungkin bukan faktor karena semua kelebihan tidak perlu.
Menggunakan java 8 Anda dapat menggunakan streaming:
List<Integer> mylist = Arrays.asList(100, 101, 102);
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));
Set<E> alphaSet = new HashSet<E>(<your List>);
atau contoh lengkap
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListToSet
{
public static void main(String[] args)
{
List<String> alphaList = new ArrayList<String>();
alphaList.add("A");
alphaList.add("B");
alphaList.add("C");
alphaList.add("A");
alphaList.add("B");
System.out.println("List values .....");
for (String alpha : alphaList)
{
System.out.println(alpha);
}
Set<String> alphaSet = new HashSet<String>(alphaList);
System.out.println("\nSet values .....");
for (String alpha : alphaSet)
{
System.out.println(alpha);
}
}
}
Saya akan melakukan pemeriksaan Null sebelum mengubah ke set.
if(myList != null){
Set<Foo> foo = new HashSet<Foo>(myList);
}
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
Anda dapat mengonversi List<>
keSet<>
Set<T> set=new HashSet<T>();
//Added dependency -> If list is null then it will throw NullPointerExcetion.
Set<T> set;
if(list != null){
set = new HashSet<T>(list);
}
Untuk Java 8 sangat mudah:
List < UserEntity > vList= new ArrayList<>();
vList= service(...);
Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());
new ArrayList<>()
;-)
Java - addAll
set.addAll(aList);
Java - Obyek baru
new HashSet(list)
Java-8
list.stream().collect(Collectors.toSet());
Menggunakan Guva
Sets.newHashSet(list)
Apache Commons
CollectionUtils.addAll(targetSet, sourceList);
Java 10
var set = Set.copyOf(list);
Cara terbaik untuk menggunakan konstruktor
Set s= new HashSet(list);
Di java 8 Anda juga dapat menggunakan stream api ::
Set s= list.stream().collect(Collectors.toSet());
Ada berbagai cara untuk mendapatkan Set
:
List<Integer> sourceList = new ArrayList();
sourceList.add(1);
sourceList.add(2);
sourceList.add(3);
sourceList.add(4);
// Using Core Java
Set<Integer> set1 = new HashSet<>(sourceList); //needs null-check if sourceList can be null.
// Java 8
Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet());
Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new));
//Guava
Set<Integer> set4 = Sets.newHashSet(sourceList);
// Apache commons
Set<Integer> set5 = new HashSet<>(4);
CollectionUtils.addAll(set5, sourceList);
Ketika kita menggunakan Collectors.toSet()
mengembalikan set dan per doc: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
. Jika kita ingin mendapatkan HashSet
maka kita bisa menggunakan alternatif lain untuk mendapatkan satu set (centang set3
).
Dengan Java 10, sekarang Anda dapat menggunakannya Set#copyOf
untuk dengan mudah mengkonversi List<E>
ke yang tidak dapat dimodifikasi Set<E>
:
Contoh:
var set = Set.copyOf(list);
Ingatlah bahwa ini adalah operasi yang tidak berurutan, dan null
elemen tidak diizinkan, karena akan membuang a NullPointerException
.
Jika Anda ingin itu dapat dimodifikasi, maka cukup kirimkan ke konstruktor Set
implementasi.
Solusi yang lebih tangguh dengan Java 8 Optional.ofNullable
Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);
Jika Anda menggunakan Eclipse Collections :
MutableSet<Integer> mSet = Lists.mutable.with(1, 2, 3).toSet();
MutableIntSet mIntSet = IntLists.mutable.with(1, 2, 3).toSet();
The MutableSet
antarmuka meluas java.util.Set
sedangkan MutableIntSet
antarmuka tidak. Anda juga dapat mengonversi apa saja Iterable
menjadi Set
menggunakan Sets
kelas pabrik.
Set<Integer> set = Sets.mutable.withAll(List.of(1, 2, 3));
Ada lebih banyak penjelasan tentang pabrik yang bisa berubah yang tersedia di Eclipse Collections di sini .
Jika Anda menginginkan ImmutableSet
dari List
, Anda dapat menggunakan Sets
pabrik sebagai berikut:
ImmutableSet<Integer> immutableSet = Sets.immutable.withAll(List.of(1, 2, 3))
Catatan: Saya pengendara untuk Eclipse Collections
Ingat bahwa, mengonversi dari Daftar ke Set akan menghapus duplikat dari koleksi karena Daftar mendukung duplikat tetapi Set tidak mendukung duplikat di Jawa.
Konversi Langsung: Cara paling umum dan sederhana untuk mengonversi Daftar ke Perangkat
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting a list to set
Set<String> set = new HashSet<>(list);
Koleksi Apache Commons: Anda juga dapat menggunakan Commons Collections API untuk mengonversi Daftar ke Perangkat: -
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Creating a set with the same number of members in the list
Set<String> set = new HashSet<>(4);
// Adds all of the elements in the list to the target set
CollectionUtils.addAll(set, list);
Menggunakan Stream: Cara lain adalah mengonversi daftar yang diberikan ke streaming, lalu streaming untuk mengatur: -
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting to set using stream
Set<String> set = list.stream().collect(Collectors.toSet());
Set
danMap
yang digunakan;HashSet
adalah diasumsikan di sini.