ইতিমধ্যে আলোচিত হিসাবে , এপিআই ডিজাইনাররা ধরে নিবেন না যে বিকাশকারী nullমান এবং অনুপস্থিত মানগুলিকে একইভাবে আচরণ করতে চায় ।
আপনি যদি এখনও এটি করতে চান তবে আপনি ক্রমটি প্রয়োগ করে এটি স্পষ্টভাবে করতে পারেন
.map(Optional::ofNullable).findFirst().flatMap(Function.identity())
প্রবাহে ফলাফল যদি উভয় ক্ষেত্রেই খালি alচ্ছিক হয়, যদি কোনও প্রথম উপাদান না থাকে বা যদি প্রথম উপাদান থাকে null। সুতরাং আপনার ক্ষেত্রে, আপনি ব্যবহার করতে পারেন
String firstString = strings.stream()
.map(Optional::ofNullable).findFirst().flatMap(Function.identity())
.orElse(null);
nullযদি প্রথম উপাদানটি অনুপস্থিত বা থাকে তবে একটি মান পেতে null।
আপনি যদি এই কেসের মধ্যে পার্থক্য করতে চান তবে আপনি কেবল flatMapপদক্ষেপটি বাদ দিতে পারেন :
Optional<String> firstString = strings.stream()
.map(Optional::ofNullable).findFirst().orElse(null);
System.out.println(firstString==null? "no such element":
firstString.orElse("first element is null"));
এটি আপনার আপডেট হওয়া প্রশ্নের চেয়ে আলাদা নয় different আপনাকে কেবল "no such element"সাথে "StringWhenListIsEmpty"এবং "first element is null"সাথে প্রতিস্থাপন করতে হবে null। তবে আপনি যদি শর্তসাপেক্ষ পছন্দ না করেন তবে আপনি এটির মতো অর্জনও করতে পারেন:
String firstString = strings.stream().skip(0)
.map(Optional::ofNullable).findFirst()
.orElseGet(()->Optional.of("StringWhenListIsEmpty"))
.orElse(null);
এখন, firstStringএটি হবে nullযদি কোনও উপাদান উপস্থিত থাকে তবে তা থাকে nullএবং "StringWhenListIsEmpty"যখন কোনও উপাদান উপস্থিত না থাকে।