আমি কিভাবে কনভার্ট করব int[]
মধ্যে List<Integer>
জাভা?
অবশ্যই, আমি আইটেম অনুসারে আইটেমটি লুপে করা ছাড়া অন্য কোনও উত্তরে আগ্রহী। তবে অন্য কোনও উত্তর না থাকলে, এই কার্যকারিতাটি জাভার অংশ নয় তা প্রমাণ করার জন্য আমি সেইটিকে সেরা হিসাবে বেছে নেব।
আমি কিভাবে কনভার্ট করব int[]
মধ্যে List<Integer>
জাভা?
অবশ্যই, আমি আইটেম অনুসারে আইটেমটি লুপে করা ছাড়া অন্য কোনও উত্তরে আগ্রহী। তবে অন্য কোনও উত্তর না থাকলে, এই কার্যকারিতাটি জাভার অংশ নয় তা প্রমাণ করার জন্য আমি সেইটিকে সেরা হিসাবে বেছে নেব।
উত্তর:
সেখান থেকে রূপান্তরের জন্য কোন শর্টকাট int[]
থেকে List<Integer>
যেমন Arrays.asList
বক্সিং সাথে মোকাবিলা করে না এবং শুধু একটি তৈরি করবে List<int[]>
যা নয় কি আপনি চান। আপনাকে একটি ইউটিলিটি পদ্ধতি তৈরি করতে হবে।
int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>(ints.length);
for (int i : ints)
{
intList.add(i);
}
new ArrayList<Integer>() {{ for (int i : ints) add(i); }}
জাভা 8 এ আপনি এটি করতে পারেন
int[] ints = {1,2,3};
List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());
এছাড়াও থেকে পেয়ারা লাইব্রেরি ... com.google.common.primitives.Ints:
List<Integer> Ints.asList(int...)
অন্যান্য উত্তরগুলির প্রত্যাশার সাথে অ্যারে.এএসলিস্ট কাজ করবে না।
এই কোডটি 10 পূর্ণসংখ্যার একটি তালিকা তৈরি করবে না । এটি 10 টি নয়, 1 টি মুদ্রণ করবে :
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List lst = Arrays.asList(arr);
System.out.println(lst.size());
এটি পূর্ণসংখ্যার একটি তালিকা তৈরি করবে:
List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
আপনার কাছে ইতিমধ্যে ইনস এর অ্যারে থাকলে, রূপান্তর করার কোনও দ্রুত উপায় নেই, আপনি লুপটি দিয়ে আরও ভাল।
অন্যদিকে, যদি আপনার অ্যারেতে বস্তুগুলি থাকে তবে এটি আদিম নয়, অ্যারে.এএসলিস্ট কাজ করবে:
String str[] = { "Homer", "Marge", "Bart", "Lisa", "Maggie" };
List<String> lst = Arrays.asList(str);
আমি একটি পৃথক পদ্ধতিতে অন্য উত্তর যুক্ত করব; কোনও লুপ নয় তবে একটি বেনাম শ্রেণি যা অটোবক্সিং বৈশিষ্ট্যগুলি ব্যবহার করবে:
public List<Integer> asList(final int[] is)
{
return new AbstractList<Integer>() {
public Integer get(int i) { return is[i]; }
public int size() { return is.length; }
};
}
set
পদ্ধতিটি যুক্ত করেছি এবং এখন আমি এমনকি অ্যারে বাছাই করতে পারি ...
কোডের ক্ষুদ্রতম অংশটি হবে:
public List<Integer> myWork(int[] array) {
return Arrays.asList(ArrayUtils.toObject(array));
}
যেখানে অ্যারে ইউটিলস কমন্স-ল্যাং থেকে আসে :)
ArrayUtils
এটি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য আপেক্ষিক বড় লাইব্রেরি
ArrayUtils.toPrimitive(...)
মূল।
প্রবাহ সহ জাভা 8 এ:
int[] ints = {1, 2, 3};
List<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, Arrays.stream(ints).boxed().toArray(Integer[]::new));
বা সংগ্রহকারীদের সাথে
List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());
আপনি যদি জাভা 8 ব্যবহার করে থাকেন তবে আমরা এটিকে স্ট্রিম এপিআই ব্যবহার করে একটি তালিকায় রূপান্তর করতে পারি।
List<Integer> list = Arrays.stream(arr) // IntStream
.boxed() // Stream<Integer>
.collect(Collectors.toList());
আপনি পাশাপাশি রূপান্তর করতে ইন্টারস্ট্রিম ব্যবহার করতে পারেন।
List<Integer> list = IntStream.of(arr) // return Intstream
.boxed() // Stream<Integer>
.collect(Collectors.toList());
পেয়ারা এবং অ্যাপাচি কমনের মতো অন্যান্য বাহ্যিক গ্রন্থাগারও এটি রূপান্তরিত উপলভ্য।
চিয়ার্স।
এই ত্রুটি প্রতিবেদনটি যাচাই করা উচিত , যা "ত্রুটি নয়" এবং নীচের পাঠ্যের কারণে বন্ধ ছিল:
"পুরো অ্যারেগুলির অটোবক্সিং যথাযথ আচরণের জন্য নির্দিষ্ট করা হয়নি large বড় অ্যারেগুলির জন্য এটি প্রতিরোধমূলক ব্যয়বহুল হতে পারে" "
এই ক্লাসে চেষ্টা করুন:
class PrimitiveWrapper<T> extends AbstractList<T> {
private final T[] data;
private PrimitiveWrapper(T[] data) {
this.data = data; // you can clone this array for preventing aliasing
}
public static <T> List<T> ofIntegers(int... data) {
return new PrimitiveWrapper(toBoxedArray(Integer.class, data));
}
public static <T> List<T> ofCharacters(char... data) {
return new PrimitiveWrapper(toBoxedArray(Character.class, data));
}
public static <T> List<T> ofDoubles(double... data) {
return new PrimitiveWrapper(toBoxedArray(Double.class, data));
}
// ditto for byte, float, boolean, long
private static <T> T[] toBoxedArray(Class<T> boxClass, Object components) {
final int length = Array.getLength(components);
Object res = Array.newInstance(boxClass, length);
for (int i = 0; i < length; i++) {
Array.set(res, i, Array.get(components, i));
}
return (T[]) res;
}
@Override
public T get(int index) {
return data[index];
}
@Override
public int size() {
return data.length;
}
}
পরীক্ষা ক্ষেত্রে:
List<Integer> ints = PrimitiveWrapper.ofIntegers(10, 20);
List<Double> doubles = PrimitiveWrapper.ofDoubles(10, 20);
// etc
সেরা শট:
**
* Integer modifiable fix length list of an int array or many int's.
*
* @author Daniel De Leon.
*/
public class IntegerListWrap extends AbstractList<Integer> {
int[] data;
public IntegerListWrap(int... data) {
this.data = data;
}
@Override
public Integer get(int index) {
return data[index];
}
@Override
public Integer set(int index, Integer element) {
int r = data[index];
data[index] = element;
return r;
}
@Override
public int size() {
return data.length;
}
}
উদাহরণ:
int[] intArray = new int[]{1, 2, 3};
List<Integer> integerListWrap = new IntegerListWrap(intArray);
List<Integer> integerListWrap1 = new IntegerListWrap(1, 2, 3);
আপনি যদি কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহারের জন্য উন্মুক্ত হন তবে এটি Eclipse সংগ্রহগুলিতে কাজ করবে :
int[] a = {1, 2, 3};
List<Integer> integers = IntLists.mutable.with(a).collect(i -> i);
Assert.assertEquals(Lists.mutable.with(1, 2, 3), integers);
দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ ।
/* Integer[] to List<Integer> */
Integer[] intArr = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
List<Integer> arrList = new ArrayList<>();
arrList.addAll(Arrays.asList(intArr));
System.out.println(arrList);
/* Integer[] to Collection<Integer> */
Integer[] intArr = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
Collection<Integer> c = Arrays.asList(intArr);
এই সম্পর্কে কি:
int[] a = {1,2,3};
Integer[] b = ArrayUtils.toObject(a);
List<Integer> c = Arrays.asList(b);
এখানে একটি সমাধান:
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Integer[] iArray = Arrays.stream(array).boxed().toArray(Integer[]::new);
System.out.println(Arrays.toString(iArray));
List<Integer> list = new ArrayList<>();
Collections.addAll(list, iArray);
System.out.println(list);
আউটপুট:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
এখানে আবার জাভা 8 স্ট্রিম সহ আরও একটি সম্ভাবনা রয়েছে:
void intArrayToListOfIntegers(int[] arr, List<Integer> list) {
IntStream.range(0, arr.length).forEach(i -> list.add(arr[i]));
}
অ্যারেলিস্টে অ্যারে রূপান্তর করার একটি সাধারণ উপায়
<T> ArrayList<T> toArrayList(Object o, Class<T> type){
ArrayList<T> objects = new ArrayList<>();
for (int i = 0; i < Array.getLength(o); i++) {
//noinspection unchecked
objects.add((T) Array.get(o, i));
}
return objects;
}
ব্যবহার
ArrayList<Integer> list = toArrayList(new int[]{1,2,3}, Integer.class);