Ption Optional.orElse () `এবং ption Optional.orElseGet () between এর মধ্যে পার্থক্য


206

আমি পদ্ধতি Optional<T>.orElse()এবং Optional<T>.orElseGet()পদ্ধতির মধ্যে পার্থক্য বুঝতে চেষ্টা করছি ।

orElse()পদ্ধতির বর্ণনাটি "উপস্থিত থাকলে মানটি ফিরিয়ে দিন, অন্যথায় অন্যটি ফিরিয়ে দিন" is

যদিও, orElseGet()পদ্ধতির বর্ণনাটি "উপস্থিত থাকলে মানটি ফিরিয়ে দিন, অন্যথায় অন্যকে অনুরোধ করুন এবং সেই আহ্বানের ফলাফলটি ফিরিয়ে দিন"।

orElseGet()পদ্ধতি একটি সরবরাহকারী কার্মিক ইন্টারফেস, যা মূলত কোন পরামিতি এবং আয় লাগবে না লাগে T

কোন পরিস্থিতিতে আপনার ব্যবহার করা প্রয়োজন orElseGet()? আপনার যদি কোনও পদ্ধতি থাকে T myDefault()তবে আপনি কেবল optional.orElse(myDefault())তার চেয়ে কেন করবেন না optional.orElseGet(() -> myDefault())?

দেখে মনে হচ্ছে না যে orElseGet()ল্যাম্বডা এক্সপ্রেশনটির কার্য সম্পাদন পরবর্তী সময়ে বা কোনও কিছুর জন্য স্থগিত করে দিচ্ছে, তবে এর মূল বক্তব্য কী? (আমি ভেবেছিলাম হবে যে এটা যদি এটা ফিরে একটি নিরাপদ আরো উপযোগী হবে Optional<T>যার get()একটি কখনও ছোঁড়ার NoSuchElementExceptionএবং isPresent()সবসময় সত্য ফেরৎ ... কিন্তু স্পষ্টরূপে তার না, এটা ঠিক আয় Tমত orElse())।

আমি মিস করছি অন্য কিছু পার্থক্য আছে?


7
কারণটি হ'ল আপনি যখন orElseGetএটি ব্যবহার করেন কেবল তখনই সরবরাহকারীকে কল করে যখন মানটি অনুপস্থিত।
অ্যালেক্স সালয়িউ

9
আহ ঠিক আছে। তাই ক্ষেত্রে পদ্ধতি এখনো বলা হয়, কিন্তু তার ফেরত মান ঠিক ব্যবহার করা হয় না। orElse()myDefault()
jbx

3
কারণ আমি ভুল বোঝাবুঝি কি দেখা করেছি বা শুধু ব্যবহার বিস্মরণ থেকে প্রশ্ন সম্মত orElseGet()কিছু গুরুতর বাগ হতে পারে: medium.com/alphadev-thoughts/...
softarn

একটি ভাল ব্যাখ্যা এখানে পাওয়া যায়: baeldung.com/java-optional-or-else-vs-or-else-get
নেস্টর মাইল্যায়েভ

উত্তর:


172

এই দুটি পরিস্থিতিতে নিন:

Optional<Foo> opt = ...
Foo x = opt.orElse( new Foo() );
Foo y = opt.orElseGet( Foo::new );

যদি optকোনও মান না থাকে তবে দুটি সত্যিই সমান। তবে যদি opt কোনও মান থাকে তবে কয়টি Fooবস্তু তৈরি হবে?

PS: অবশ্যই এই উদাহরণে পার্থক্যটি পরিমাপযোগ্য হতে পারে না তবে উদাহরণস্বরূপ আপনাকে যদি কোনও দূরবর্তী ওয়েব পরিষেবা থেকে আপনার ডিফল্ট মানটি পেতে হয়, বা হঠাৎ এটি খুব গুরুত্বপূর্ণ হয়ে ওঠে।


22
স্পষ্টকরণ বলছি জন্য ধন্যবাদ। সুতরাং পার্থক্যটি সূক্ষ্ম তবে তাৎপর্যপূর্ণ। দ্বিতীয় ক্ষেত্রে এটি কোনও নতুন Fooঅবজেক্ট তৈরি করবে না , যখন প্রথম ক্ষেত্রে এটি এটি তৈরি করবে, তবে এর ভিতরে কোনও মান থাকলে এটি ব্যবহার করবে না Optional
jbx

5
@ জেবিএক্স হ্যাঁ, এবং আমার নোডির উদাহরণে এটি যুক্তিযুক্তভাবে কোনও আসল পার্থক্য তৈরি করে না, তবে আপনাকে উদাহরণস্বরূপ কোনও দূরবর্তী ওয়েব পরিষেবাদি বা কোনও ডাটাবেস থেকে যদি আপনার ডিফল্ট মান অর্জন করতে হয় তবে হঠাৎ পার্থক্যটি খুব গুরুত্বপূর্ণ হয়ে ওঠে।
বিজিকলপ

2
@ জেবিএক্স: আপনি দুটি জিনিস মিশ্রিত করছেন। অজানা মাপদণ্ডের ফলাফলগুলি সম্পর্কে এসওতে ইতিমধ্যে প্রশ্ন রয়েছে যা কেবল কোনও গণনার ফলাফল ব্যবহার না করেই হয়েছিল। জেভিএম তা করতে পারে। অন্যদিকে, System.out.println()হয় না গণনা কিন্তু একটি লক্ষণীয় পার্শ্ব প্রতিক্রিয়া উত্পাদক একটি বিবৃতি। এবং আমি ইতিমধ্যে বলেন যে পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়া অপ্টিমাইজেশন (কনসোল আউটপুট প্রবাহ রোধ করা হবে হয় একটি বহিস্থিত সম্পদ)।
হলগার

7
আমি প্রথমবারের মতো উত্তরটি গ্রহণ করার পরিবর্তে কোনও প্রশ্ন দেখি।
কিরিল জি।

4
" উদাহরণস্বরূপ, যদি আপনাকে কোনও দূরবর্তী ওয়েব পরিষেবা থেকে আপনার ডিফল্ট মান পেতে হয় " এটি আমার পরিস্থিতিটি ছিল ঠিক। আমার ক্ষেত্রে, alচ্ছিকটি একটি অনুসন্ধান ছিল, এবং কোনও প্রশ্নের অনুপস্থিতিতে ডিফল্ট হ'ল সমস্ত মান আনা ... হ্যাঁ, বা ইলসেগেট সেই ক্রিয়াকলাপটির রানটাইমকে 1000 বার হ্রাস করেছিল।
স্কটিসিয়াস

109

সংক্ষিপ্ত উত্তর:

  • orElse () সর্বদা প্রদত্ত ফাংশনটি কল করবে আপনি তা চান না কেন, Optional.isPresent()মান নির্বিশেষে
  • orElseGet () কেবল তখন প্রদত্ত ফাংশনটিতে কল করবে যখনOptional.isPresent() == false

আসল কোডে, প্রয়োজনীয় সংস্থানটি ব্যয়বহুল হলে আপনি দ্বিতীয় পদ্ধতির বিষয়টি বিবেচনা করতে পারেন

// Always get heavy resource
getResource(resourceId).orElse(getHeavyResource()); 

// Get heavy resource when required.
getResource(resourceId).orElseGet(() -> getHeavyResource()) 

আরও তথ্যের জন্য, এই ফাংশন সহ নিম্নলিখিত উদাহরণটি বিবেচনা করুন:

public Optional<String> findMyPhone(int phoneId)

পার্থক্যটি নীচে হিসাবে রয়েছে:

                           X : buyNewExpensivePhone() called

+——————————————————————————————————————————————————————————————————+——————————————+
|           Optional.isPresent()                                   | true | false |
+——————————————————————————————————————————————————————————————————+——————————————+
| findMyPhone(int phoneId).orElse(buyNewExpensivePhone())          |   X  |   X   |
+——————————————————————————————————————————————————————————————————+——————————————+
| findMyPhone(int phoneId).orElseGet(() -> buyNewExpensivePhone()) |      |   X   |
+——————————————————————————————————————————————————————————————————+——————————————+

কখন optional.isPresent() == false, দুটি পদ্ধতির মধ্যে কোনও পার্থক্য নেই। যাইহোক, কখন optional.isPresent() == true, orElse()সর্বদা পরবর্তী ক্রিয়াকলাপটি কল করে আপনি এটি চান বা না চান।

পরিশেষে, পরীক্ষার কেসটি নিম্নরূপ:

ফলাফল:

------------- Scenario 1 - orElse() --------------------
  1.1. Optional.isPresent() == true
    Going to a very far store to buy a new expensive phone
    Used phone: MyCheapPhone

  1.2. Optional.isPresent() == false
    Going to a very far store to buy a new expensive phone
    Used phone: NewExpensivePhone

------------- Scenario 2 - orElseGet() --------------------
  2.1. Optional.isPresent() == true
    Used phone: MyCheapPhone

  2.2. Optional.isPresent() == false
    Going to a very far store to buy a new expensive phone
    Used phone: NewExpensivePhone

কোড:

public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("\tGoing to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }


    public static void main(String[] args) {
        TestOptional test = new TestOptional();
        String phone;
        System.out.println("------------- Scenario 1 - orElse() --------------------");
        System.out.println("  1.1. Optional.isPresent() == true");
        phone = test.findMyPhone(10).orElse(test.buyNewExpensivePhone());
        System.out.println("\tUsed phone: " + phone + "\n");

        System.out.println("  1.2. Optional.isPresent() == false");
        phone = test.findMyPhone(-1).orElse(test.buyNewExpensivePhone());
        System.out.println("\tUsed phone: " + phone + "\n");

        System.out.println("------------- Scenario 2 - orElseGet() --------------------");
        System.out.println("  2.1. Optional.isPresent() == true");
        // Can be written as test::buyNewExpensivePhone
        phone = test.findMyPhone(10).orElseGet(() -> test.buyNewExpensivePhone());
        System.out.println("\tUsed phone: " + phone + "\n");

        System.out.println("  2.2. Optional.isPresent() == false");
        phone = test.findMyPhone(-1).orElseGet(() -> test.buyNewExpensivePhone());
        System.out.println("\tUsed phone: " + phone + "\n");
    }
}

আমি মনে করি আপনার ছবিতে একটি ত্রুটি থাকতে পারে, এটি ডানদিকে "orLeseGet" বলা উচিত? তা ছাড়াও দুর্দান্ত উদাহরণ example
ইয়াল্লা টি।

হ্যাঁ আপনি সঠিক. আপনাকে ধন্যবাদ :) আমি পরের কয়েক ঘন্টার মধ্যে এটি আপডেট করব
nxhoaf

দ্বিতীয় বুলেট পয়েন্টের জন্য, এর Optional.isPresent() == falseপরিবর্তে মনে হবে (মিথ্যা, সত্য নয়)
ম্যানুয়েল জর্দান

দুর্দান্ত উদাহরণ - তবে জাভাদোকরা কীভাবে Optional.orElseরাজ্যগুলির জন্য If a value is present, returns the value, otherwise returns otherএই আচরণটি বোঝাতে পারে তা আমি সত্যিই পাই না ...
এরিক ফিনম্যান

আপনার ব্যাখ্যা উপর নির্ভর করে, আমার জন্য এটি যে মত দেখায় orElse()অনুরূপ আচরণ করবে finallyমধ্যে try-catchঅভিব্যক্তি। আমি কি সঠিক?
মাইক বি।

63

কুডো সমস্যার জন্য আমি এখানে পৌঁছেছি উল্লিখিত ।

আমি আমার অভিজ্ঞতা অন্যদের সাথে ভাগ করে নিচ্ছি।

orElse, বা orElseGet, এটিই প্রশ্ন:

static String B() {
    System.out.println("B()...");
    return "B";
}

public static void main(final String... args) {
    System.out.println(Optional.of("A").orElse(B()));
    System.out.println(Optional.of("A").orElseGet(() -> B()));
}

কপি করে প্রিন্ট

B()...
A
A

orElseBচ্ছিকের মানের উপর নির্ভরশীল বি এর মান নির্ধারণ করে। সুতরাং, orElseGetঅলস হয়।


7
এইটা সমস্যা না'. এটি সরল সত্য যে পদ্ধতি কার্যকর করার আগে কোনও পদ্ধতির যুক্তি মূল্যায়ন করা হয়। যদি আপনি B()নামের কোনও পদ্ধতিতে পাস করেন orElse()বা abc()এটি কোনও পার্থক্য না করে তবে B()মূল্যায়ন হয়।
jbx

11
এখানে বিষয়টি হ'ল পদ্ধতিগুলির নামকরণ। orউপসর্গ বিপথগামী ডেভেলপারদের (নিজেকে সহ যখন আমি সমস্যা জিজ্ঞাসা) চিন্তাভাবনা মধ্যে যে এটি একটি শর্ট-সার্কিট অপারেশন, কারণ যে কি আমরা বুলিয়ান অবস্থায় ব্যবহার করা হয়। তবে এটি তা নয়, এটি কেবলমাত্র একটি নামের নাম যা orতার উপসর্গে রয়েছে, সুতরাং এর যুক্তিগুলি Optionalমূল্য বহন করছে কিনা তা নির্বিশেষে মূল্যায়ন করা হবে । দুর্ভাগ্যজনক যে নামকরণটি বিভ্রান্তিকর, আমরা এ সম্পর্কে কিছু করতে পারি তা নয়।
jbx

37

আমি মধ্যে সবচেয়ে বড় পার্থক্য বলতে হবে orElseএবং orElseGetআসে যখন আমরা নতুন মান পেতে কিছু মূল্যায়ন করতে চান elseশর্ত।

এই সহজ উদাহরণ বিবেচনা করুন -

// oldValue is String type field that can be NULL
String value;
if (oldValue != null) {
    value = oldValue;
} else {
    value = apicall().value;
}

এখন আসুন উপরের উদাহরণটি Optionalবরাবর ব্যবহার করে orElse,

// oldValue is Optional type field
String value = oldValue.orElse(apicall().value);

এখন আসুন উপরের উদাহরণটি Optionalবরাবর ব্যবহার করে orElseGet,

// oldValue is Optional type field
String value = oldValue.orElseGet(() -> apicall().value);

যখন orElseআহ্বান করা হয়, তখন apicall().valueমূল্যায়ন করা হয় এবং পদ্ধতিতে দেওয়া হয়। যদিও orElseGetমূল্যায়নের ক্ষেত্রে কেবল oldValueখালি থাকলেই ঘটে । orElseGetঅলস মূল্যায়ন অনুমতি দেয়।


4
ইফলেস () এর এই "অদ্ভুত" আচরণের কারণে আমি অনেক সময় নষ্ট করেছি। আমি বলতে চাই যে, যদি এলজেগেট () যদি ইলেস () এর চেয়ে বেশি পছন্দ করা হয়
এনরিকো গিউরিন

3

নিম্নলিখিত উদাহরণটিতে পার্থক্যটি প্রদর্শিত হবে:

String destroyTheWorld() {
  // destroy the world logic
  return "successfully destroyed the world";
}

Optional<String> opt = Optional.empty();

// we're dead
opt.orElse(destroyTheWorld());

// we're safe    
opt.orElseGet(() -> destroyTheWorld());

উত্তরটি ডক্সেও উপস্থিত হয়।

public T orElseGet(Supplier<? extends T> other):

মান যদি থাকে, অন্যথায় ডাকা অন্যান্য এবং যে আবাহন ফল ফিরে যান।

Supplier করা হবে না যদি প্রার্থনা করা Optionalউপস্থাপন করে। যেহেতু,

public T orElse(T other):

উপস্থিত থাকলে মানটি ফিরিয়ে দিন, অন্যথায় অন্যটি ফিরিয়ে দিন।

যদি otherকোনও পদ্ধতি যদি স্ট্রিংটি ফেরত দেয় তবে তা আমন্ত্রণ জানানো হবে, তবে উপস্থিতির ক্ষেত্রে এটির মান ফেরত দেওয়া হবে না Optional


3

পার্থক্যটি বেশ সূক্ষ্ম এবং যদি আপনি বেশি মনোযোগ না দেন তবে আপনি এটি কোনও ভুল উপায়ে ব্যবহার করে রাখবেন।

শ্রেষ্ঠ উপায় মধ্যে পার্থক্য বুঝতে পারা orElse()এবং orElseGet()যে orElse()সবসময় যদি মৃত্যুদন্ড কার্যকর করা হবে Optional<T>হয় নাল বা না , কিন্তু orElseGet()যখন শুধুমাত্র মৃত্যুদন্ড কার্যকর করা হবে Optional<T>হয় নাল

-এর আভিধানিক অর্থ orElse হয় : - অংশ চালানো কিছু উপস্থিত নেই, কিন্তু এখানে এটা স্ববিরোধী, উদাহরণস্বরূপ নীচে দেখুন:

    Optional<String> nonEmptyOptional = Optional.of("Vishwa Ratna");
    String value = nonEmptyOptional.orElse(iAmStillExecuted());

    public static String iAmStillExecuted(){
    System.out.println("nonEmptyOptional is not NULL,still I am being executed");
    return "I got executed";
    }

আউটপুট: ননএম্পটিঅપ્শনাল নুল নয়, তবুও আমি মৃত্যুদন্ড কার্যকর করছি


    Optional<String> emptyOptional = Optional.ofNullable(null);
    String value = emptyOptional.orElse(iAmStillExecuted());
    public static String iAmStillExecuted(){
    System.out.println("emptyOptional is NULL, I am being executed, it is normal as 
    per dictionary");
    return "I got executed";
    }

আউটপুট : খালি অপশনাল হ'ল নুল, আমি সম্পাদিত হচ্ছি, অভিধান অনুসারে এটি স্বাভাবিক

এর জন্য orElseGet(), পদ্ধতি অভিধানের অর্থ অনুসারে চলে, orElseGet()অংশটি কেবল তখনই কার্যকর করা হবে যখন ptionচ্ছিক শূন্য হয়

মানদণ্ড :

+--------------------+------+-----+------------+-------------+-------+
| Benchmark          | Mode | Cnt | Score      | Error       | Units |
+--------------------+------+-----+------------+-------------+-------+
| orElseBenchmark    | avgt | 20  | 60934.425  | ± 15115.599 | ns/op |
+--------------------+------+-----+------------+-------------+-------+
| orElseGetBenchmark | avgt | 20  | 3.798      | ± 0.030     | ns/op |
+--------------------+------+-----+------------+-------------+-------+

মন্তব্যসমূহ : আমাদের নির্দিষ্ট উদাহরণের জন্য orElseGet()স্পষ্টভাবে ছাপিয়ে গেছে orElse()

আশা করি এটি আমার মতো লোকদের সন্দেহগুলি কেটে দিয়েছে যারা খুব মৌলিক উদাহরণটি চায় :)


2

প্রথমে উভয় পদ্ধতির ঘোষণাটি পরীক্ষা করে দেখুন।

1) অরলিজ: যুক্তি কার্যকর করুন এবং যুক্তি হিসাবে ফলাফল পাস করুন।

public T orElse(T other) {    
 return value != null ? value : other;
}

2) অরেলসগেট: alচ্ছিকের ভিতরে মানটি যদি শূন্য থাকে তবে যুক্তি সম্পাদন করুন

public T orElseGet(Supplier<? extends T> other) {
  return value != null ? value : other.get(); 
}

উপরোক্ত ঘোষণার উপর কিছু ব্যাখ্যা: "Oচ্ছিক.অরলিজ" যুক্তিটি সর্বদা optionচ্ছিকভাবে (শূন্য, খালি বা মান সহ) অবজেক্টের মান নির্বিশেষে কার্যকর করা হয়। "Optional.orElse" ব্যবহার করার সময় সর্বদা উপরে বর্ণিত বিষয়টি বিবেচনা করুন, অন্যথায় "Optional.orElse" ব্যবহার নিম্নলিখিত পরিস্থিতিতে খুব ঝুঁকিপূর্ণ হতে পারে।

ঝুঁকি -১) লগিংয়ের সমস্যা: যদি বা ইলসে কোনও লিখিত বিবৃতি থাকে তবে এই ক্ষেত্রে, আপনি প্রতিবার এটি লগইন করবেন।

Optional.of(getModel())
   .map(x -> {
      //some logic
   })
  .orElse(getDefaultAndLogError());

getDefaultAndLogError() {
  log.error("No Data found, Returning default");
  return defaultValue;
}

ঝুঁকি -২) পারফরম্যান্স ইস্যু: orElse এর ভিতরে থাকা সামগ্রী যদি সময়-নিবিড় থাকে: সময় নিবিড় বিষয়বস্তু যে কোনও আই / ও ক্রিয়াকলাপ ডিবি কল, এপিআই কল, ফাইল রিডিং হতে পারে। যদি আমরা এই জাতীয় সামগ্রীটি ওরেস () এ রাখি, সিস্টেমটি কোনও ব্যবহারের কোড কার্যকর করে না।

Optional.of(getModel())
   .map(x -> //some logic)
   .orElse(getDefaultFromDb());

getDefaultFromDb() {
   return dataBaseServe.getDefaultValue(); //api call, db call.
}

ঝুঁকি -3) অবৈধ অবস্থা বা বাগ ইস্যু: যদি orElse এর ভিতরে থাকা সামগ্রীগুলি কোনও অবজেক্টের স্থিতিটি পরিবর্তন করে চলেছে: আমরা একই জায়গায় অন্য কোনও স্থানে অপশনাল.ম্যাপ ফাংশনটির ভিতরে বলতে পারি এবং এটি আমাদের একটি জটিল ত্রুটিতে ফেলতে পারে।

List<Model> list = new ArrayList<>();
Optional.of(getModel())
  .map(x -> {
  })
  .orElse(get(list));

get(List < String > list) {
   log.error("No Data found, Returning default");
   list.add(defaultValue);
   return defaultValue;
}

তারপরে, আমরা কখন orElse () এর সাথে যেতে পারি? ডিফল্ট মানটি যখন কিছু ধ্রুবক বস্তু হয় তবে orElse ব্যবহার করতে পছন্দ করুন। উপরের সমস্ত ক্ষেত্রে আমরা Optional.orElseGet () দিয়ে যেতে পারি (যা কেবল তখনই কার্যকর করা হয় যখন অপশনালটি খালি মূল্য না রাখে) Optional.orElse () এর পরিবর্তে। কেন ?? অরলেসে, আমরা ডিফল্ট ফলাফলের মানটি পাস করি, তবে orElseGet এ আমরা সরবরাহকারী এবং সরবরাহকারীটির পদ্ধতিটি কেবল তখনই কার্যকর করি যদি ptionচ্ছিক মানটি শূন্য হয়।

এটি থেকে কী গ্রহণযোগ্যতা:

  1. যদি এতে কোনও লগ স্টেটমেন্ট থাকে তবে "Optional.orElse" ব্যবহার করবেন না।
  2. যদি এতে সময়-নিবিড় যুক্তি থাকে তবে "Optional.orElse" ব্যবহার করবেন না।
  3. যদি এটি কোনও অবজেক্টের স্থিতি পরিবর্তন করে তবে "Oচ্ছিক.অরএলসি" ব্যবহার করবেন না।
  4. যদি আমাদের একটি ধ্রুবক, এনাম ফিরে আসতে হয় তবে "Oচ্ছিক.অরএলসি" ব্যবহার করুন।
  5. 1,2 এবং 3 য় পয়েন্টে উল্লিখিত পরিস্থিতিতে "ptionচ্ছিক.অরএলসগেট" পছন্দ করুন।

আমি এটি আমার মাঝারি ব্লগটি পয়েন্ট -2 ( "ptionচ্ছিক.ম্যাপ / অপশনাল.অরএলস"! = "যদি / অন্যথায়" ) ব্যাখ্যা করেছি। কোডার হিসাবে নয় প্রোগ্রামার হিসাবে জাভা 8 ব্যবহার করুন


0

নিম্নলিখিত কোড বিবেচনা:

import java.util.Optional;

// one class needs to have a main() method
public class Test
{
  public String orelesMethod() {
    System.out.println("in the Method");
    return "hello";
  }

  public void test() {
    String value;
    value = Optional.<String>ofNullable("test").orElseGet(this::orelesMethod);
    System.out.println(value); 

    value = Optional.<String>ofNullable("test").orElse(orelesMethod());
    System.out.println(value); 
  }

  // arguments are passed using the text field below this editor
  public static void main(String[] args)
  {
    Test test = new Test();

    test.test();
  }
}

যদি আমরা পেতে valueএই ভাবে: Optional.<String>ofNullable(null)সেখানে orElseGet () এবং orElse () মধ্যে কোন পার্থক্য নেই, কিন্তু যদি আমরা পেতে valueএই ভাবে: Optional.<String>ofNullable("test"), orelesMethod()মধ্যে orElseGet()বলা হয় না হবে তবে এর মধ্যে orElse()এটা বলা হবে

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