আমি কীভাবে একটি জাভা 8 ইন্টারস্ট্রিমকে একটি তালিকায় রূপান্তর করব?


283

আমি নথির দিকে তাকিয়ে আছি IntStream, এবং আমি একটি toArrayপদ্ধতি দেখছি , তবে সরাসরি এ-তে যাওয়ার কোনও উপায় নেইList<Integer>

নিশ্চয় একটি উপায় আছে একটি রূপান্তর হয় Streamএকটি থেকে List?


এই লিঙ্কটি ব্যবহার করে দেখুন: স্ট্যাকওভারফ্লো
বৈভব জৈন

2
@ কার্লরিখটার অন্যান্য প্রশ্ন আপনাকে টাইপড তালিকা দেয় না। এছাড়াও, এই প্রশ্নটি চার বছর আগে থেকেই ছিল এবং 300+ upvotes সহ এর উত্তর রয়েছে answer আমরা এখন কেন এটি একীভূত করার চেষ্টা করছি?
এরিক উইলসন

উত্তর:


541

IntStream::boxed

IntStream::boxedএকটি সক্রিয় IntStreamএকটি মধ্যে Stream<Integer>যা আপনি করতে পারেন তাহলে collectএকটি মধ্যে List:

theIntStream.boxed().collect(Collectors.toList())

boxedপদ্ধতি পরিবর্তন করে intএকটি আদিম মান IntStreamএকটি স্ট্রীমে Integerবস্তু। শব্দ "বক্সিং" নাম intIntegerরূপান্তর প্রক্রিয়া। ওরাকল টিউটোরিয়াল দেখুন ।


1
@ স্কিভি বলতে আমি বোঝাতে চাইছি যে এর পরে অন্য সমস্ত উত্তর অপ্রয়োজনীয় কারণ এগুলি এত প্রাকৃতিক হবে না।
দিমিত্রি জিনজবার্গ

1
আপনাকে ধন্যবাদ আমি এখনও বাক্সিত পদ্ধতিটি দেখিনি এবং এটি কবজির মতো কাজ করেছে।
বিকৃত

সংযোজন: আমি মনে করি যে আপনি যদি কোনও স্ট্যাটিক আমদানি ব্যবহার করেন তবে এই কোডগুলি কিছুটা ছোট, স্বচ্ছ এবং সুন্দর হয়ে উঠবে toList। এই ফাইলটি আমদানি মধ্যে নিম্নলিখিত স্থাপন দ্বারা সম্পন্ন করা হয়: static import java.util.stream.Collectors.toList;। তারপরে সংগ্রহ কলটি কেবল পড়ে .collect(toList())
লি

1
Eclipse এ IDE পদ্ধতিগুলির জন্য একটি স্ট্যাটিক আমদানি যুক্ত করা সম্ভব। এই যোগ করে সম্পন্ন করা হয় Collectorsমধ্যে বর্গ পছন্দসমূহ -> জাভা -> এডিটর -> সামগ্রী সহায়তা -> প্রিয় । এর পরে, আইডিই পূরণ করতে এবং স্ট্যাটিক আমদানি যুক্ত করতে আপনাকে কেবল toLiহিট সিটিআর + স্পেসে টাইপ করতে হবে toList
লি

2
আমি যা চেষ্টা করেছি তার সাথে আমার চুল ছিঁড়ে যাচ্ছিল, boxed()অংশটি উল্লেখ করার জন্য আপনাকে ধন্যবাদ
কে রাফেল

16

আপনি স্ট্রিমে মানচিত্রওঅবজ ()ও ব্যবহার করতে পারেন যা একটি ইনট্ফংশন নেয় এবং এই স্ট্রিমের উপাদানগুলিতে প্রদত্ত ফাংশনটি প্রয়োগের ফলাফলের সমন্বয়ে একটি অবজেক্ট-মূল্যবান স্ট্রিম প্রদান করে।

List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());

4
বিদ্রূপের স্ট্রোকের মধ্যে, এটিই boxed()হ'ল এটি ating
মাকোটো

9

আপনি Eclipse সংগ্রহগুলিতে উপলব্ধ আদিম সংগ্রহগুলি ব্যবহার করতে পারেন এবং বক্সিং এড়াতে পারেন।

MutableIntList list = 
    IntStream.range(1, 5)
    .collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);

দ্রষ্টব্য: আমি গ্রহন গ্রাহক সংগ্রহের একজন সহযোগী।


6
যদিও গ্রহণের সংগ্রহগুলি সাধারণত বেশ সহায়ক, এটি দেখে মনে হচ্ছে না এটি কিছু সহজ করে
বেন

1
ইসি ৯.০ থেকে আপনি আদিম স্ট্রিম থেকে আদিম তালিকা তৈরি করতে পারেন। MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
ডোনাল্ড রাব

1
এটিই আমি সন্ধান করছিলাম .. পূর্ণসংখ্যা বা আপত্তি জানার জন্য ইন্টার স্ট্রিম বক্সিং করা আলাদা জিনিস
বিকাশ

2

জাভা 8 ব্যবহার করে প্রতিটি int উপাদানগুলির বর্গক্ষেত্রের সন্ধানের উদাহরণটি সন্ধান করুন: -

IntStream ints = Arrays.stream(new int[] {1,2,3,4,5});       
List<Integer> intsList = ints.map(x-> x*x)
          .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);

0

আপনি সংগ্রহ পদ্ধতিটি ব্যবহার করতে পারেন:

IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);

প্রকৃতপক্ষে, আপনি যখন কোনও বস্তুর স্ট্রিমে কল করুন (সংগ্রাহক।

public static <T> Collector<T, ?, List<T>> toList() {
    return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
        var0.addAll(var1);
        return var0;
    }, CH_ID);
}

দ্রষ্টব্য: আপনি যদি সমান্তরাল সংগ্রহ চালাতে চান তবে তৃতীয় প্যারামিটারটি প্রয়োজনীয়; ক্রমানুসারে সংগ্রহ প্রদানের জন্য কেবল প্রথম দুটি যথেষ্ট হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.