ইতিমধ্যে আলোচিত হিসাবে , এপিআই ডিজাইনাররা ধরে নিবেন না যে বিকাশকারী 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"
যখন কোনও উপাদান উপস্থিত না থাকে।