উত্তর:
এটার মত:
Set<T> mySet = new HashSet<>(Arrays.asList(someArray));
জাভা 9+ তে, যদি অবিচ্ছেদ্য সেট ঠিক থাকে:
Set<T> mySet = Set.of(someArray);
জাভা 10+ এ, জেনেরিক ধরণের পরামিতি অ্যারে উপাদান ধরণের থেকে অনুমান করা যায়:
var mySet = Set.of(someArray);
Arrays.asListও (1)।
Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);
এটি জেডিকে 6 থেকে সংগ্রহসমূহ adএডএলএল (জাভা.ইটিল.ক্লেকশন, টি ...) ।
অতিরিক্তভাবে: আমাদের অ্যারে আদিমতায় পূর্ণ হলে কী হবে?
জেডিকে <8 এর জন্য, আমি কেবল forএকটি পাসে মোড়ানো এবং অ্যাড-টু-সেট করতে সুস্পষ্ট লুপটি লিখব ।
জেডিকে> = 8 এর জন্য একটি আকর্ষণীয় বিকল্পটি হ'ল:
Arrays.stream(intArray).boxed().collect(Collectors.toSet());
java.util.Collections.addAll। এছাড়াও, আমি আর কমন্স সংগ্রহের সুপারিশ করব না, এর সাথে কী উত্সাহ দেওয়া হচ্ছে না এবং পেয়ারা বিদ্যমান নেই।
addAllও ( এন ) হবে।
সঙ্গে পেয়ারা আপনি কি করতে পারেন:
T[] array = ...
Set<T> set = Sets.newHashSet(array);
new HashSet<T>(Arrays.asList(someArray))। Google.github.io/guava/reLives/19.0/api/docs/com/google/common/…
জাভা 8:
String[] strArray = {"eins", "zwei", "drei", "vier"};
Set<String> strSet = Arrays.stream(strArray).collect(Collectors.toSet());
System.out.println(strSet);
// [eins, vier, zwei, drei]
আমাদের Streamপাশাপাশি ব্যবহারের বিকল্প রয়েছে । আমরা বিভিন্ন উপায়ে স্ট্রিম পেতে পারি:
Set<String> set = Stream.of("A", "B", "C", "D").collect(Collectors.toCollection(HashSet::new));
System.out.println(set);
String[] stringArray = {"A", "B", "C", "D"};
Set<String> strSet1 = Arrays.stream(stringArray).collect(Collectors.toSet());
System.out.println(strSet1);
// if you need HashSet then use below option.
Set<String> strSet2 = Arrays.stream(stringArray).collect(Collectors.toCollection(HashSet::new));
System.out.println(strSet2);
সোর্স কোড Collectors.toSet()দেখায় যে উপাদান একটি থেকে একের পর এক যোগ করা হয় HashSetকিন্তু স্পেসিফিকেশন নিশ্চয়তা দেয় না এটি একটি হতে হবে HashSet।
"সেটটি ফেরানোর ধরণ, পরিবর্তনীয়তা, ধারাবাহিকতা বা থ্রেড-সুরক্ষার কোনও গ্যারান্টি নেই" "
সুতরাং পরবর্তী বিকল্পটি ব্যবহার করা ভাল। আউটপুটটি হ'ল:
[A, B, C, D]
[A, B, C, D]
[A, B, C, D]
জাভা 9 প্রবর্তিত Set.ofস্ট্যাটিক ফ্যাক্টরি পদ্ধতি প্রবর্তিত উপাদান বা অ্যারের জন্য অপরিবর্তনীয় সেট প্রদান করে।
@SafeVarargs
static <E> Set<E> of(E... elements)
পরীক্ষা করে দেখুন অপরিবর্তনীয় সেট স্ট্যাটিক কারখানার পদ্ধতি বিস্তারিত জানার জন্য।
আমরা দুটি উপায়ে একটি অপরিবর্তনীয় সেটও পেতে পারি:
Set.copyOf(Arrays.asList(array))Arrays.stream(array).collect(Collectors.toUnmodifiableList());Collectors.toUnmodifiableList()অভ্যন্তরীণভাবে Set.ofজাভা 9-তে প্রবর্তিত পদ্ধতিটি পদ্ধতিটি আরও জানায় আমার এই উত্তরটিও পরীক্ষা করে দেখুন।
Stream.of()- আমি সেটিকে জানতাম না। একটি ছোট বোতল সম্পর্কে Collectors.toSet(): আপনি বলছেন যে অনুমান একের পর এক উপাদান যুক্ত করার গ্যারান্টি দেয় না, তবে এর অর্থ এটি: "জমে ... একটি নতুন হিসাবে Set"। এবং এটি আরও পঠনযোগ্য - আমার মনের পক্ষে এতটাই পছন্দনীয়, আপনার যদি কংক্রিটের ধরণ, পরিবর্তনীয়তা, সিরিয়ালাইজিবিলিটি এবং থ্রেড-সুরক্ষার গ্যারান্টির প্রয়োজন না হয়।
HashSet। এটি কেবল গ্যারান্টি দেয় যে এটি হবে Setএবং এটাই আমার অর্থ। আশা করি আমি এটি পরিষ্কার করে দিয়েছি।
আপনি করার পরে আপনি Arrays.asList(array)কার্যকর করতে পারেনSet set = new HashSet(list);
এখানে একটি নমুনা পদ্ধতি রয়েছে, আপনি লিখতে পারেন:
public <T> Set<T> GetSetFromArray(T[] array) {
return new HashSet<T>(Arrays.asList(array));
}
ইন অন্ধকার সংগ্রহগুলি নিম্নলিখিত কাজ করবে:
Set<Integer> set1 = Sets.mutable.of(1, 2, 3, 4, 5);
Set<Integer> set2 = Sets.mutable.of(new Integer[]{1, 2, 3, 4, 5});
MutableSet<Integer> mutableSet = Sets.mutable.of(1, 2, 3, 4, 5);
ImmutableSet<Integer> immutableSet = Sets.immutable.of(1, 2, 3, 4, 5);
Set<Integer> unmodifiableSet = Sets.mutable.of(1, 2, 3, 4, 5).asUnmodifiable();
Set<Integer> synchronizedSet = Sets.mutable.of(1, 2, 3, 4, 5).asSynchronized();
ImmutableSet<Integer> immutableSet = Sets.mutable.of(1, 2, 3, 4, 5).toImmutable();
দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ
দ্রুত: আপনি এটি করতে পারেন:
// Fixed-size list
List list = Arrays.asList(array);
// Growable list
list = new LinkedList(Arrays.asList(array));
// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));
এবং বিপরীত
// Create an array containing the elements in a list
Object[] objectArray = list.toArray();
MyClass[] array = (MyClass[])list.toArray(new MyClass[list.size()]);
// Create an array containing the elements in a set
objectArray = set.toArray();
array = (MyClass[])set.toArray(new MyClass[set.size()]);
আমি উপরের পরামর্শ থেকে নীচে লিখেছি - এটি চুরি করুন ... দুর্দান্ত!
/**
* Handy conversion to set
*/
public class SetUtil {
/**
* Convert some items to a set
* @param items items
* @param <T> works on any type
* @return a hash set of the input items
*/
public static <T> Set<T> asSet(T ... items) {
return Stream.of(items).collect(Collectors.toSet());
}
}
সেখানে মহান উত্তর অনেক ইতিমধ্যে হয়েছে, কিন্তু তাদের অধিকাংশই প্রিমিটিভের অ্যারে সাথে কাজ করবে না (যেমন int[], long[], char[], byte[], ইত্যাদি)
জাভা 8 এবং তারপরে, আপনি অ্যারেটি দিয়ে বাক্স করতে পারেন:
Integer[] boxedArr = Arrays.stream(arr).boxed().toArray(Integer[]::new);
তারপরে স্ট্রিম ব্যবহার করে সেট এ রূপান্তর করুন:
Stream.of(boxedArr).collect(Collectors.toSet());
কিছু সময় কিছু স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে অনেক সহায়তা করে। অ্যাপাচি কমন্স সংগ্রহগুলি দেখার চেষ্টা করুন । এক্ষেত্রে আপনার সমস্যাগুলি এই জাতীয় কিছুতে রূপান্তরিত হয়
String[] keys = {"blah", "blahblah"}
Set<String> myEmptySet = new HashSet<String>();
CollectionUtils.addAll(pythonKeywordSet, keys);
এবং এখানে সংগ্রহশালা জাভাদোক
java.util.Collections.addAll(myEmptySet, keys);??
ব্যবহার করুন CollectionUtilsবা ArrayUtilsথেকেstanford-postagger-3.0.jar
import static edu.stanford.nlp.util.ArrayUtils.asSet;
or
import static edu.stanford.nlp.util.CollectionUtils.asSet;
...
String [] array = {"1", "q"};
Set<String> trackIds = asSet(array);
ইন জাভা 10 :
String[] strs = {"A", "B"};
Set<String> set = Set.copyOf(Arrays.asList(strs));
Set.copyOfএকটি unmodifiable ফেরৎ Setদেওয়া উপাদান ধারণকারী Collection।
প্রদত্ত Collectionঅবশ্যই nullহওয়া উচিত নয় এবং এতে কোনও nullউপাদান থাকতে হবে না ।
private Map<Integer, Set<Integer>> nobreaks = new HashMap();
nobreaks.put(1, new HashSet(Arrays.asList(new int[]{2, 4, 5})));
System.out.println("expected size is 3: " +nobreaks.get(1).size());
আউটপুট হয়
expected size is 3: 1
এটি পরিবর্তন করুন
nobreaks.put(1, new HashSet(Arrays.asList( 2, 4, 5 )));
আউটপুট হয়
expected size is 3: 3
Android এর জন্য যে কেউ সমাধান করছেন:
তারকাচিহ্ন *হয় spreadঅপারেটর। এটি সংগ্রহের সমস্ত উপাদান পৃথকভাবে প্রয়োগ করে, প্রতিটি varargপদ্ধতি প্যারামিটারে পাস করে । এটি সমান:
val myArray = arrayOf("data", "foo")
val mySet = setOf(*myArray)
// Equivalent to
val mySet = setOf("data", "foo")
// Multiple spreads ["data", "foo", "bar", "data", "foo"]
val mySet = setOf(*myArray, "bar", *myArray)
কোনও পরামিতি পাস করা setOf()খালি সেটে ফল দেয় না।
এছাড়াও setOf, আপনি একটি নির্দিষ্ট হ্যাশ প্রকারের জন্য এগুলির যে কোনওটি ব্যবহার করতে পারেন:
hashSetOf()
linkedSetOf()
mutableSetOf()
sortableSetOf()
সংগ্রহ আইটেমের ধরণটি স্পষ্টভাবে কীভাবে সংজ্ঞায়িত করা যায়।
setOf<String>()
hashSetOf<MyClass>()
new HashSet<Object>(Arrays.asList(Object[] a));
তবে আমি মনে করি এটি আরও কার্যকর হবে:
final Set s = new HashSet<Object>();
for (Object o : a) { s.add(o); }
HashSetঅ্যারের আকারের উপর নির্ভর করে সেট করা হয়, উদাহরণস্বরূপ।
Set<T> b = new HashSet<>(Arrays.asList(requiredArray));