উত্তর:
আমি sepp2k এর সাথে একমত, তবে কিছু অন্যান্য বিবরণ রয়েছে যা বিবেচনা করতে পারে:
new HashSet<Foo>(myList);
আপনাকে একটি অমীমাংসিত সেট দেবে যার সদৃশ নেই। এই ক্ষেত্রে, আপনার বস্তুগুলিতে .equals () পদ্ধতি ব্যবহার করে সদৃশ চিহ্নিত করা হয়। এটি .hashCode () পদ্ধতির সাথে একত্রে করা হয়। (সমতা বর্ণন সম্পর্কে আরো জানার জন্য এখানে )
বাছাই করা সেট দেয় এমন বিকল্প হ'ল:
new TreeSet<Foo>(myList);
Foo তুলনীয় কার্যকর করে যদি এটি কাজ করে। যদি তা না হয় তবে আপনি তুলনামূলক ব্যবহার করতে চাইতে পারেন:
Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);
স্বতন্ত্রতা নিশ্চিত করতে এটি তুলনামূলকভাবে () তুলনামূলক ইন্টারফেস থেকে) বা তুলনা () তুলনায় (উপরের উপর নির্ভর করে) depends সুতরাং, যদি আপনি কেবল স্বাতন্ত্র্য সম্পর্কে চিন্তা করেন তবে হ্যাশসেটটি ব্যবহার করুন। আপনি যদি বাছাইয়ের পরে থাকেন, তবে ট্রিসেটটি বিবেচনা করুন। (মনে রাখবেন: পরে অপ্টিমাইজ করুন!) সময়ের দক্ষতার ক্ষেত্রে যদি স্থান কার্যক্ষমতা বিবেচনায় একটি হ্যাশসেট ব্যবহার করে, ট্রিসেটটি দেখুন। নোট করুন যে সেট এবং মানচিত্রের আরও কার্যকর প্রয়োগগুলি ট্রভের (এবং অন্যান্য অবস্থানের) মাধ্যমে উপলব্ধ।
আপনি যদি পেয়ারা গ্রন্থাগার ব্যবহার করেন :
Set<Foo> set = Sets.newHashSet(list);
বা, আরও ভাল:
Set<Foo> set = ImmutableSet.copyOf(list);
ImmutableSet.of()
, উদাহরণস্বরূপ। সম্পাদনা: এটি ফ্যাক্টর নাও হতে পারে কারণ সমস্ত ওভারলোডগুলি অনিবদ্ধ।
জাভা 8 ব্যবহার করে আপনি স্ট্রিম ব্যবহার করতে পারেন:
List<Integer> mylist = Arrays.asList(100, 101, 102);
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));
Set<E> alphaSet = new HashSet<E>(<your List>);
বা সম্পূর্ণ উদাহরণ
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);
}
}
}
আমি সেট এ রূপান্তর করার আগে একটি নাল চেক সঞ্চালন করব।
if(myList != null){
Set<Foo> foo = new HashSet<Foo>(myList);
}
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
আপনি রূপান্তর List<>
করতে পারেনSet<>
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);
}
জাভা 8 এর জন্য এটি খুব সহজ:
List < UserEntity > vList= new ArrayList<>();
vList= service(...);
Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());
new ArrayList<>()
;-)
জাভা - অ্যাডএল
set.addAll(aList);
জাভা - নতুন অবজেক্ট
new HashSet(list)
জাভা-8
list.stream().collect(Collectors.toSet());
গুভা ব্যবহার করা
Sets.newHashSet(list)
অ্যাপাচি কমন্স
CollectionUtils.addAll(targetSet, sourceList);
জাভা 10
var set = Set.copyOf(list);
কনস্ট্রাক্টর ব্যবহারের সেরা উপায়
Set s= new HashSet(list);
জাভা 8-তে আপনি এপিআই স্ট্রিমও ব্যবহার করতে পারেন:
Set s= list.stream().collect(Collectors.toSet());
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);
যখন আমরা ব্যবহার Collectors.toSet()
এটি একটি সেট ফেরৎ এবং ডক অনুযায়ী: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
। আমরা যদি একটি পেতে চাই HashSet
তবে আমরা সেট (চেক set3
) পেতে অন্য বিকল্পটি ব্যবহার করতে পারি ।
জাভা 10 এর সাহায্যে আপনি এখন Set#copyOf
সহজেই List<E>
একটিকে অবিরাম পরিবর্তনযোগ্য রূপান্তর করতে ব্যবহার করতে পারেন Set<E>
:
উদাহরণ:
var set = Set.copyOf(list);
মনে রাখবেন যে এটি একটি আনর্ডারড অপারেশন এবং is null
উপাদান না অনুমোদিত যেমন একটি নিক্ষেপ করা হবে NullPointerException
।
যদি আপনি এটি পরিবর্তনযোগ্য হতে চান, তবে কেবল এটি নির্মাণকারীর কাছে একটি Set
বাস্তবায়ন করুন।
এর সাথে আরও একটি জাভা 8 রোধক সমাধান Optional.ofNullable
Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);
আপনি যদি গ্রহগ্রহের সংগ্রহগুলি ব্যবহার করেন :
MutableSet<Integer> mSet = Lists.mutable.with(1, 2, 3).toSet();
MutableIntSet mIntSet = IntLists.mutable.with(1, 2, 3).toSet();
MutableSet
ইন্টারফেস প্রসারিত java.util.Set
যেহেতু MutableIntSet
ইন্টারফেস না। আপনি যে কোনো রূপান্তর করতে পারেন Iterable
একটি থেকে Set
ব্যবহার Sets
কারখানা বর্গ।
Set<Integer> set = Sets.mutable.withAll(List.of(1, 2, 3));
সেখানে অন্ধকার সংগ্রহগুলি পাওয়া চপল কারখানার আরও ব্যাখ্যা এখানে ।
আপনি যদি একটি ImmutableSet
থেকে একটি চান List
, আপনি Sets
নিম্নরূপে কারখানাটি ব্যবহার করতে পারেন :
ImmutableSet<Integer> immutableSet = Sets.immutable.withAll(List.of(1, 2, 3))
দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ
মনে রাখবেন, তালিকা থেকে সেট থেকে রূপান্তরকরণ সংগ্রহ থেকে সদৃশগুলি মুছে ফেলবে কারণ তালিকার সদৃশগুলি সমর্থন করে তবে সেট জাভাতে সদৃশকে সমর্থন করে না।
ডাইরেক্ট রূপান্তর: তালিকায় একটি সেটকে রূপান্তর করার সর্বাধিক সাধারণ এবং সহজ উপায়
// 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);
অ্যাপাচি কমন্স সংগ্রহ: আপনি কোনও তালিকা কোনও সেটে রূপান্তর করতে কমন্স সংগ্রহগুলি এপিআইও ব্যবহার করতে পারেন: -
// 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);
স্ট্রিম ব্যবহার করে: অন্য উপায় হল প্রদত্ত তালিকাটিকে স্ট্রিমে রূপান্তর করা, তারপরে সেট করে স্ট্রিম করুন: -
// 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
এবংMap
কোনটি ব্যবহার করছে তার উপর নির্ভর করে এখানে বিপদগুলি রয়েছে ;HashSet
এখানে ধরে নেওয়া হয়।