Saya mencari cara yang sangat sederhana untuk membuat Set.
Arrays.asList("a", "b" ...)
menciptakan sebuah List<String>
Apakah ada yang serupa Set
?
Saya mencari cara yang sangat sederhana untuk membuat Set.
Arrays.asList("a", "b" ...)
menciptakan sebuah List<String>
Apakah ada yang serupa Set
?
Jawaban:
Sekarang dengan Java 8 Anda dapat melakukan ini tanpa perlu kerangka pihak ketiga:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
Lihat Kolektor .
Nikmati!
Menggunakan Jambu biji , sesederhana itu:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
Atau untuk set yang bisa berubah:
Set<String> mySet = Sets.newHashSet("a", "b")
Untuk tipe data selengkapnya, lihat panduan pengguna Jambu
Sets.newHashSet("a", "b")
atauSets.newLinkedHashSet("a", "b")
Sets.newLinkedHashSet()
tidak ada dengan tanda tangan itu, maaf
Set<String> mySet = ImmutableSet.of("a", "b");
Anda bisa menggunakan
new HashSet<String>(Arrays.asList("a","b"));
Untuk kasus khusus set dengan nol atau satu anggota, Anda dapat menggunakan:
java.util.Collections.EMPTY_SET
dan:
java.util.Collections.singleton("A")
java.util.Collections.emptySet()
adalah, dalam pikiran saya, lebih disukai daripada EMPTY_SET, karena keamanan tipe. Dari komentar di kelas Koleksi:Unlike the like-named field, this method is parameterized.
Seperti yang dikatakan orang lain, gunakan:
new HashSet<String>(Arrays.asList("a","b"));
Alasan ini tidak ada di Java adalah karena Arrays.asList
mengembalikan daftar berukuran tetap, dengan kata lain:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
Pengembalian:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Tidak ada implementasi JDK dari "ukuran tetap" Set
di dalam Arrays
kelas. Kenapa kamu menginginkan ini? A Set
menjamin bahwa tidak ada duplikat, tetapi jika Anda mengetiknya dengan tangan, Anda seharusnya tidak memerlukan fungsionalitas itu ... dan List
memiliki lebih banyak metode. Kedua antarmuka meluas Collection
dan Iterable
.
Seperti yang dikatakan orang lain, gunakan jambu biji Jika Anda benar-benar menginginkan fungsi ini - karena tidak ada di JDK. Lihatlah jawaban mereka (khususnya jawaban Michael Schmeißer) untuk informasi tentang itu.
Di Java 9, fungsi serupa telah ditambahkan melalui metode pabrik:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(Ada juga yang setara List
.)
Tidak, tetapi Anda bisa melakukannya seperti ini
new HashSet<String>(Arrays.asList("a", "b", ...));
Berikut sedikit metode yang dapat Anda gunakan
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
Cara lain untuk melakukannya menggunakan Java 8 dan enum adalah:
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
Lihat EnumSet .
Saya akan merekomendasikan analisis kinerja antara pendekatan ini dan
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
karena jika Anda memiliki lebih dari lima elemen, javadoc dari metode menyatakan yang mungkin menjadi masalah kinerja seperti yang Anda lihat di javadoc dari Set.Of (E, E ...) .