java অ্যারে থেকে ArrayList তৈরি করুন




arrays type-conversion (24)

আপনি Arrays.asList (arrayObj) এর সাহায্যে এটি সহজেই করতে পারেন;

Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList<Element> arraylist =Arrays.asList(array);

আমার এমন একটি অ্যারে আছে যা শুরু হয়েছে:

Element[] array = {new Element(1), new Element(2), new Element(3)};

আমি এই অ্যারেকে অ্যারেস্টিস্ট ক্লাসের একটি বস্তুতে রূপান্তর করতে চাই।

ArrayList<Element> arraylist = ???;

যদিও এই প্রশ্নের অনেক পুরোপুরি লিখিত উত্তর রয়েছে, তবে আমি আমার ইনপুট যোগ করব।

বলুন আপনার Element[] array = { new Element(1), new Element(2), new Element(3) }; আছে Element[] array = { new Element(1), new Element(2), new Element(3) };

নতুন ArrayList নিম্নলিখিত উপায়ে তৈরি করা যেতে পারে

ArrayList<Element> arraylist_1 = new ArrayList<>(Arrays.asList(array));
ArrayList<Element> arraylist_2 = new ArrayList<>(
    Arrays.asList(new Element[] { new Element(1), new Element(2), new Element(3) }));

// Add through a collection
ArrayList<Element> arraylist_3 = new ArrayList<>();
Collections.addAll(arraylist_3, array);

এবং তারা খুব ভাল ArrayList এর সব অপারেশন সমর্থন

arraylist_1.add(new Element(4)); // or remove(): Success
arraylist_2.add(new Element(4)); // or remove(): Success
arraylist_3.add(new Element(4)); // or remove(): Success

কিন্তু নিম্নলিখিত ক্রিয়াকলাপগুলি কেবল একটি অ্যারেস্টিস্টের একটি তালিকা দৃশ্য প্রদান করে এবং প্রকৃত অ্যার্যলিস্ট নয়।

// Returns a List view of array and not actual ArrayList
List<Element> listView_1 = (List<Element>) Arrays.asList(array);
List<Element> listView_2 = Arrays.asList(array);
List<Element> listView_3 = Arrays.asList(new Element(1), new Element(2), new Element(3));

অতএব, তারা কিছু ArrayList অপারেশন করার চেষ্টা করার সময় ত্রুটি দিতে হবে

listView_1.add(new Element(4)); // Error
listView_2.add(new Element(4)); // Error
listView_3.add(new Element(4)); // Error

অ্যারের link তালিকা উপস্থাপনা আরও।


জাভা 9

জাভা 9 এ , আপনি List লিখন তৈরি করতে স্ট্যাটিক ফ্যাক্টরি পদ্ধতির List ব্যবহার করতে পারেন। নিম্নলিখিত কিছু ভালো:

List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));

এই তিনটি উপাদান ধারণকারী একটি immutable তালিকা ফিরে আসবে। যদি আপনি একটি পরিবর্তনযোগ্য তালিকা চান, তবে ArrayList কন্সট্রকটারে সেই তালিকাটি প্রেরণ করুন:

new ArrayList<>(List.of(// elements vararg))

JEP 269: সংগ্রহের জন্য সুবিধার্থে কারখানার পদ্ধতি

জেইপি 269 জাভা সংগ্রহ API এর জন্য কিছু সুবিধাজনক কারখানা পদ্ধতি সরবরাহ করে। এই অপরিবর্তনীয় স্ট্যাটিক কারখানা পদ্ধতিগুলি জাভা 9 এবং পরবর্তীতে List , Set এবং Map ইন্টারফেসগুলিতে তৈরি করা হয়েছে।


(পুরাতন থ্রেড, কিন্তু শুধুমাত্র 2 সেন্ট হিসাবে কেউ গৌয়া বা অন্যান্য libs এবং কিছু অন্যান্য বিবরণ উল্লেখ)

যদি আপনি পারেন, গুয়াভা ব্যবহার করুন

এটি গুয়াভা পথকে নির্দেশ করে মূল্যবান, যা এই শেনানিজানকে সহজ করে তোলে:

ব্যবহার

একটি অপ্রয়োজনীয় তালিকা জন্য

copyOf() ক্লাস এবং তার of() এবং copyOf() ফ্যাক্টরি পদ্ধতিগুলি ব্যবহার করুন (উপাদানগুলি copyOf() হতে পারে না) :

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array

একটি পরিবর্তনযোগ্য তালিকা জন্য

Lists শ্রেণি এবং তার newArrayList() কারখানা পদ্ধতিগুলি ব্যবহার করুন:

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection
List<String> l2 = Lists.newArrayList(aStringArray);               // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

উদাহরণস্বরূপ, অন্যান্য ক্লাসগুলিতে অন্যান্য ডাটা স্ট্রাকচারগুলির জন্য একই পদ্ধতিগুলি দয়া করে নোট করুন।

কেন গুরাভ?

টাইপ-সিকিউরিটির জন্য জেনেরিকসের কারণে জেনারিকসের কারণে ক্লাটারটি হ্রাস করাতে প্রধান আকর্ষণ হতে পারে, কারণ গুয়াভা ফ্যাক্টরি পদ্ধতির ব্যবহারগুলি বেশিরভাগ সময়ে টাইপ করা যায়। যাইহোক, এই যুক্তি জাভা 7 নতুন হীরা অপারেটরের সাথে এসে পৌঁছানোর পরে কম জল ধারণ করে।

কিন্তু এটি একমাত্র কারণ নয় (এবং জাভা 7 এখনও সর্বত্র নেই): শর্ট্যান্ড সিনট্যাক্সটি খুব সহজ, এবং উপরের দিকে দেখানো পদ্ধতিগুলির সূচনাকারীরা আরো এক্সপ্রেসিভ কোড লেখার অনুমতি দেয়। আপনি একটি গুয়াব কল করুন যা বর্তমান জাভা সংগ্রহগুলির সাথে 2 লাগে।

যদি তুমি না পারো ...

একটি অপ্রয়োজনীয় তালিকা জন্য

JDK এর Arrays ক্লাস এবং asList() কারখানার পদ্ধতিটি ব্যবহার করুন, একটি Collections.unmodifiableList() সহ মোড়ানো:

List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));

উল্লেখ্য যে asList() জন্য ফেরত টাইপ একটি কংক্রিট ArrayList প্রয়োগকরণ ব্যবহার করে একটি List , তবে এটি java.util.ArrayList নয় । এটি একটি অভ্যন্তরীণ প্রকার, যা একটি ArrayList অনুকরণ করে তবে প্রকৃতপক্ষে সরাসরি অ্যারেটিকে উল্লেখ করে এবং এটি "মাধ্যমে লিখুন" করে তোলে (পরিবর্তনগুলি অ্যারের মধ্যে প্রতিফলিত হয়)।

এটি List API এর পদ্ধতির মাধ্যমে কেবলমাত্র একটি AbstractList প্রসারিত করার মাধ্যমে (তাই, যোগ বা অপসারণ করা উপাদানগুলি অসমর্থিত) পদ্ধতির মাধ্যমে সংশোধনীগুলিকে নিষিদ্ধ করে তবে এটি কলগুলিকে ওভাররাইড করার জন্য set() কে set() করার অনুমতি দেয়। সুতরাং এই তালিকাটি সত্যিকারের asList() এবং asList() একটি কল Collections.unmodifiableList() করা উচিত Collections.unmodifiableList()

আপনি একটি পরিবর্তনযোগ্য তালিকা প্রয়োজন হলে পরবর্তী পদক্ষেপ দেখুন।

একটি পরিবর্তনযোগ্য তালিকা জন্য

উপরে হিসাবে একই, কিন্তু একটি প্রকৃত java.util.ArrayList সঙ্গে আবৃত। java.util.ArrayList :

List<String> l1  = new ArrayList<String>(Arrays.asList(array));    // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array));          // Java 1.7+
List<String> l2  = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b"));       // Java 1.7+

শিক্ষাগত উদ্দেশ্যে: ভাল ol 'ম্যানুয়াল ওয়ে

// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
  final List<T> l = new ArrayList<T>(array.length);

  for (final T s : array) {
    l.add(s);
  }
  return (l);
}

// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
  final List l = new ArrayList(array.length);

  for (int i = 0; i < array.length; i++) {
    l.add(array[i]);
  }
  return (l);
}

তাই করতে সহজ উপায় নিম্নলিখিত কোড যোগ করে। চেষ্টা এবং পরীক্ষিত.

String[] Array1={"one","two","three"};
ArrayList<String> s1= new ArrayList<String>(Arrays.asList(Array1));

আপনি জাভা 8 এ এটি অনুসরণ করতে পারেন

ArrayList<Element> list = (ArrayList<Element>)Arrays.stream(array).collect(Collectors.toList());

আপনি যদি ব্যবহার করেন:

new ArrayList<T>(Arrays.asList(myArray));

আপনি দুটি তালিকা তৈরি এবং পূরণ করতে পারেন! দুইবার একটি বড় তালিকা পূরণ করা ঠিক নয় যা আপনি করতে চান না কারণ এটি প্রতিটি সময় প্রসারিত করার প্রয়োজন হলে অন্য Object[] অ্যারে তৈরি করবে।

ভাগ্যক্রমে Arrays.asList(a[]) বাস্তবায়ন দ্রুত এবং Arrays.asList(a[]) খুব ভালভাবে সম্পন্ন করা হয়। এটি ArrayList নামক একটি ধরনের তৈরি করে। ArrayList যেখানে বস্তু [] তথ্য সরাসরি অ্যারের দিকে নির্দেশ করে।

// in Arrays
@SafeVarargs
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}
//still in Arrays, creating a private unseen class
private static class ArrayList<E>

    private final E[] a;    
    ArrayList(E[] array) {
        a = array; // you point to the previous array
    }
    ....
}

বিপজ্জনক দিকটি যদি আপনি প্রাথমিক অ্যারে পরিবর্তন করেন তবে আপনি তালিকাটি পরিবর্তন করুন! আপনি কি নিশ্চিত যে আপনি চান? হয়তো হ্যাঁ, হয়তো না.

যদি না হয়, সবচেয়ে বোধগম্য উপায় এই কাজ করা হয়:

ArrayList<Element> list = new ArrayList<Element>(myArray.length); // you know the initial capacity
for (Element element : myArray) {
    list.add(element);
}

অথবা @glglgl বলেছেন, আপনি এর সাথে আরেকটি স্বাধীন অ্যারেস্টস্ট তৈরি করতে পারেন:

new ArrayList<T>(Arrays.asList(myArray));

আমি Collections , Arrays , বা গুয়াভা ব্যবহার করতে ভালোবাসি। কিন্তু যদি এটি মাপসই না হয় বা আপনি এটি অনুভব করেন না তবে পরিবর্তে অন্য একটি বিরাট লাইন লিখুন।


প্রদত্ত:

Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };

সবচেয়ে সহজ উত্তর হল:

List<Element> list = Arrays.asList(array);

এই জরিমানা কাজ করবে। কিন্তু কিছু সতর্কতা:

  1. তালিকা থেকে ফিরে তালিকা নির্ধারিত আকার হয়েছে । সুতরাং, যদি আপনি আপনার ArrayList ফেরত তালিকা থেকে উপাদান যুক্ত করতে বা অপসারণ করতে সক্ষম হন তবে আপনাকে এটি একটি নতুন ArrayList মোড়ানো দরকার। অন্যথায় আপনি একটি UnsupportedOperationException
  2. আসল তালিকা থেকে ফিরে আসা asList() মূল অ্যারের দ্বারা সমর্থিত। আপনি যদি মূল অ্যারে সংশোধন করেন তবে তালিকাটিও সংশোধন করা হবে। এই বিস্ময়কর হতে পারে।

Java 9 আপনি ব্যবহার করতে পারেন:

List<String> list = List.of("Hello", "World", "from", "Java");
List<Integer> list = List.of(1, 2, 3, 4, 5);

একটি অ্যারে একটি অ্যারেস্টিস্ট রূপান্তর করতে, ডেভেলপাররা প্রায়ই এটি করে:

List<String> list = Arrays.asList(arr);// this is wrong way..

Arrays.asList() একটি Arrays.asList() করবে যা private static class inside Arrays একটি private static class inside Arrays , এটি java.util.ArrayList ক্লাস নয়। The java.util.Arrays.ArrayList ক্লাস set(), get(), contains() পদ্ধতি, কিন্তু উপাদান যোগ করার জন্য কোন পদ্ধতি নেই, তাই তার আকার সংশোধন করা হয়। একটি বাস্তব ArrayList তৈরি করতে, আপনাকে অবশ্যই করতে হবে:

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

ArrayList এর কন্সট্রাকটর একটি সংগ্রহের ধরন গ্রহণ করতে পারে, যা java.util.Arrays.ArrayList জন্যও একটি সুপার টাইপ।


আরেকটি উপায় (যদিও new ArrayList(Arrays.asList(array)) সমতুল্য সমতুল্য new ArrayList(Arrays.asList(array)) সমাধান কর্মক্ষমতা অনুসারে:

Collections.addAll(arraylist, array);

সব হিসাবে এই বলে তাই হবে

 new ArrayList<>(Arrays.asList(array))

এবং অ্যারে তৈরি করার সাধারণতম নতুন উপায় পর্যবেক্ষণযোগ্য

পর্যবেক্ষণযোগ্য তালিকা : এমন একটি তালিকা যা শ্রোতাদের পরিবর্তন ঘটায় তা পরিবর্তন করার অনুমতি দেয়।

জাভা SE এর জন্য আপনি চেষ্টা করতে পারেন

FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));

যে Oracle ডক্স অনুযায়ী

পর্যবেক্ষণযোগ্য ArrayList () একটি অ্যারের তালিকা দ্বারা সমর্থিত একটি নতুন খালি পর্যবেক্ষণযোগ্য তালিকা তৈরি করে। পর্যবেক্ষণযোগ্য ArrayList (ই ... আইটেম) এটি যোগ আইটেম সঙ্গে একটি নতুন পর্যবেক্ষণযোগ্য অ্যারে তালিকা তৈরি করে।

জাভা 9 আপডেট করুন

জাভা 9 এ এটি একটু সহজ:

List<String> list = List.of("element 1", "element 2", "element 3");

আপনি জাভা 8 এ স্ট্রিম দিয়ে এটি করতে পারেন।

 List<Element> elements = Arrays.stream(array).collect(Collectors.toList()); 

আরেকটি জাভা 8 সমাধান (আমি বড় সেট মধ্যে উত্তর মিস করতে পারে। যদি তাই হয়, আমার ক্ষমাপ্রার্থী)। এটি একটি অ্যার্যলিস্ট তৈরি করে (একটি তালিকা অনুসারে) অর্থাৎ একটি উপাদানগুলি মুছে ফেলতে পারে

package package org.something.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Junk {

    static <T> ArrayList<T>  arrToArrayList(T[] arr){
        return Arrays.asList(arr)
            .stream()
            .collect(Collectors.toCollection(ArrayList::new));
    }

    public static void main(String[] args) {
        String[] sArr = new String[]{"Hello", "cruel", "world"};
        List<String> ret = arrToArrayList(sArr);
        // Verify one can remove an item and print list to verify so
        ret.remove(1);
        ret.stream()
            .forEach(System.out::println);
    }
}

আউটপুট হয় ...
হ্যালো
বিশ্ব


আরেকটি সরল উপায় হল অ্যারের সমস্ত উপাদানগুলিকে একটি-প্রতিটি লুপ ব্যবহার করে একটি নতুন অ্যারেস্টিস্টে যুক্ত করা।

ArrayList<Element> list = new ArrayList<>();

for(Element e : array)
    list.add(e);

 Element[] array = {new Element(1), new Element(2), new Element(3)};
 List<Element> elements=Arrays.asList(array);

যেহেতু এই প্রশ্নটি বেশ পুরনো, তাই আমাকে অবাক করে দেয় যে কেউ এখনও সহজ ফর্মটি প্রস্তাব করেনি:

List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

জাভা 5 অনুসারে, Arrays.asList() একটি varargs পরামিতি নেয় এবং আপনি অ্যারে স্পষ্টভাবে নির্মাণ করতে হবে না।


জাভা 8 থেকে রূপান্তর করার একটি সহজ উপায় রয়েছে:

public static <T> List<T> fromArray(T[] array) {
    return Arrays.stream(array).collect(toList());
}

প্রশ্নের সাথে জাভা 1.7 ব্যবহার করে উত্তরটি হল:

ArrayList<Element> arraylist = new ArrayList<Element>(Arrays.<Element>asList(array));

তবে এটি সবসময় ইন্টারফেস ব্যবহার ভাল:

List<Element> arraylist = Arrays.<Element>asList(array);

আপনি বিভিন্ন পদ্ধতি ব্যবহার করে রূপান্তর করতে পারেন

  1. List<Element> list = Arrays.asList(array);

  2. List<Element> list = new ArrayList();
    Collections.addAll(list, array);

  3. Arraylist list = new Arraylist();
    list.addAll(Arrays.asList(array));

বিস্তারিত জানার জন্য আপনি http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html পড়ুন


আপনি সম্ভবত একটি তালিকা প্রয়োজন, একটি ArrayList না। যে ক্ষেত্রে আপনি শুধু করতে পারেন:

List<Element> arraylist = Arrays.asList(array);

// Guava
import com.google.common.collect.ListsLists
...
List<String> list = Lists.newArrayList(aStringArray); 

আরেকটি আপডেট, প্রায় শেষ বছর ২014, আপনিও জাভা 8 এর সাথে এটি করতে পারেন:

ArrayList<Element> arrayList = Stream.of(myArray).collect(Collectors.toCollection(ArrayList::new));

কয়েক অক্ষর সংরক্ষণ করা হবে, যদি এটি শুধুমাত্র একটি List হতে পারে

List<Element> list = Stream.of(myArray).collect(Collectors.toList());

ইতিমধ্যে সবাই আপনার সমস্যার জন্য যথেষ্ট ভাল উত্তর প্রদান করেছে। এখন সব পরামর্শ থেকে, আপনি আপনার প্রয়োজন মাপসই করা হবে সিদ্ধান্ত নিতে হবে। দুটি ধরনের সংগ্রহ যা আপনাকে জানতে হবে। এক unmodified সংগ্রহ এবং অন্যান্য এক সংগ্রহ যা আপনি পরে বস্তুর সংশোধন করতে পারবেন।

সুতরাং, এখানে আমি দুটি ব্যবহারের ক্ষেত্রে সংক্ষিপ্ত উদাহরণ দেব।

  • অপ্রয়োজনীয় সংগ্রহ সৃষ্টি :: যখন আপনি সৃষ্টি করার পরে সংগ্রহ বস্তুর সংশোধন করতে চান না

    List<Element> elementList = Arrays.asList(array)

  • পরিবর্তনযোগ্য সংগ্রহ সৃষ্টি :: সৃষ্টি করার পরে আপনি তৈরি সংগ্রহ বস্তুর পরিবর্তন করতে পারেন।

    List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));





type-conversion