উত্তরটি বরাবরের মতো, "এটি নির্ভর করে"। এটি কতটা ফিরে আসবে তা নির্ভর করবে। এটি সময়ের সাথে ফলাফল পরিবর্তন হয় কিনা এবং ফিরে আসা ফলাফলের ধারাবাহিকতা কতটা গুরুত্বপূর্ণ তা নির্ভর করে। এবং ব্যবহারকারী কীভাবে উত্তরটি ব্যবহার করতে পারে তার উপর এটি অনেকটাই নির্ভর করে।
প্রথমে নোট করুন যে আপনি সর্বদা একটি স্ট্রিমের থেকে সংগ্রহ পেতে পারেন এবং বিপরীতে:
// If API returns Collection, convert with stream()
getFoo().stream()...
// If API returns Stream, use collect()
Collection<T> c = getFooStream().collect(toList());
সুতরাং প্রশ্নটি হল, যা আপনার কলকারীদের পক্ষে বেশি কার্যকর।
যদি আপনার ফলাফল অসীম হতে পারে তবে কেবল একটি পছন্দ আছে: স্ট্রিম।
যদি আপনার ফলাফলটি খুব বড় হতে পারে তবে আপনি সম্ভবত স্ট্রিমটিকে পছন্দ করেন, যেহেতু এগুলি একবারে বাস্তবায়িত করার কোনও মূল্য থাকতে পারে না এবং এটি করার ফলে গুরুত্বপূর্ণ গাদা চাপ তৈরি হতে পারে।
যদি সমস্ত কলকারী যা করতে চলেছে এটির মাধ্যমে পুনরাবৃত্তি হয় (অনুসন্ধান, ফিল্টার, সামগ্রিক), আপনার স্ট্রিমটিকে পছন্দ করা উচিত, যেহেতু স্ট্রিমের মধ্যে ইতিমধ্যে এটি অন্তর্নির্মিত রয়েছে এবং কোনও সংগ্রহকে রূপায়িত করার প্রয়োজন নেই (বিশেষত যদি ব্যবহারকারী প্রক্রিয়াটি নাও করতে পারে) পুরো ফলাফল।) এটি খুব সাধারণ ঘটনা।
এমনকি যদি আপনি জানেন যে ব্যবহারকারী এটি একাধিকবার পুনরাবৃত্তি করতে পারে বা অন্যথায় এটি রাখে তবে আপনি তার পরিবর্তে কোনও স্ট্রিম ফিরে আসতে চাইতে পারেন, সাধারণ কারণে আপনি যে সংগ্রহটি এটিতে নির্বাচিত করেন তা (যেমন, অ্যারেলিস্ট) নাও থাকতে পারে তারা চান ফর্ম, এবং তারপরে কলকারীকে এটিকে যাইহোক অনুলিপি করতে হবে। আপনি যদি কোনও স্ট্রিম ফিরিয়ে দেন তবে তারা তা করতে পারে collect(toCollection(factory))
এবং তারা যা চায় ঠিক তেমন আকারে পেতে পারে।
উপরোক্ত "স্ট্রিমকে প্রাধান্য দিন" মামলাগুলি বেশিরভাগ ক্ষেত্রে স্ট্রিমটি আরও নমনীয় হয় তা থেকে উদ্ভূত হয়; আপনি কীভাবে এটি সংগ্রহে ব্যয় করতে ব্যয় এবং সীমাবদ্ধতা ব্যয় না করে কীভাবে এটি ব্যবহার করতে পারেন তা স্থির করে আবদ্ধ করতে পারেন।
দৃ case় ধারাবাহিকতা প্রয়োজনীয়তার ক্ষেত্রে আপনার যখন সংগ্রহ সংগ্রহ করতে হবে তখন একটি ক্ষেত্রে হ'ল এবং আপনাকে চলমান লক্ষ্যটির ধারাবাহিক স্ন্যাপশট তৈরি করতে হবে। তারপরে, আপনি উপাদানগুলি এমন কোনও সংগ্রহের মধ্যে রাখতে চান যা পরিবর্তিত হবে না।
সুতরাং আমি বলব যে বেশিরভাগ সময়, স্ট্রিমই সঠিক উত্তর - এটি আরও নমনীয়, এটি সাধারণত-অপ্রয়োজনীয় বস্তুগতকরণের ব্যয় চাপায় না এবং প্রয়োজনে সহজেই আপনার পছন্দের সংগ্রহে রূপান্তরিত হতে পারে। তবে কখনও কখনও, আপনাকে কোনও সংগ্রহ ফিরিয়ে দিতে হতে পারে (বলুন, দৃ strong় ধারাবাহিকতার প্রয়োজনীয়তার কারণে), বা আপনি সংগ্রহটি ফিরে আসতে চাইতে পারেন কারণ আপনি কীভাবে ব্যবহারকারীর এটি ব্যবহার করা হবে তা জানেন এবং জানেন এটি তাদের জন্য সবচেয়ে সুবিধাজনক জিনিস।
players.stream()
ঠিক এমন একটি পদ্ধতি যা কলারকে একটি স্ট্রিম ফিরিয়ে দেয়। আসল প্রশ্নটি হ'ল, আপনি কি সত্যই কলারকে একক ট্র্যাভারসাল থেকে সীমাবদ্ধ রাখতে চান, এবংCollection
এপিআইয়ের মাধ্যমে তাকে আপনার সংগ্রহে অ্যাক্সেসও অস্বীকার করতে চান ? সম্ভবত কলারaddAll
এটির অন্য কোনও সংগ্রহে যেতে চান ?