नमस्कार मित्रांनो, जावा 8 नंतर जावा ar तुलना և तुलनात्मक वर्गांसह काम करणे खूप सोपे झाले. आपण ए लागू करू शकता तुलनाकर्ता: लॅम्बडा एक्सप्रेशन वापरणे कारण हा SAM प्रकार इंटरफेस आहे. त्याची एकच अमूर्त पद्धत आहे तुलना करा () याचा अर्थ तुम्ही a पास करू शकता लॅम्बडा अभिव्यक्ती कुठे आहे तुलनाकर्ता: अपेक्षित आहे: बरेच जावा प्रोग्रामर मला वारंवार विचारतात की जावा 8 लॅम्बडाची अभिव्यक्ती जाणून घेण्याचा सर्वोत्तम मार्ग कोणता आहे. आणि माझे उत्तर, अर्थातच, ते आपल्या दैनंदिन प्रोग्रामिंग कार्यात वापरणे आहे. अंमलबजावणी झाल्यापासून समान आहे (), हॅशकोड (), तुलना करा (), և: तुलना करा () पद्धती जावा प्रोग्रामरच्या सर्वात सामान्य समस्यांपैकी एक आहेत, लॅम्ब्डा अभिव्यक्ती कशी वापरावी हे जाणून घेणे अर्थपूर्ण आहे तुलनात्मक आणि तुलनाकर्ता: जावा मध्ये.

जरी तुमच्यापैकी काहींना याबद्दल शंका असेल आपण लॅम्ब्डा अभिव्यक्ती वापरू शकतो तुलनात्मक? तो जुना इंटरफेस असल्याने – भाष्य केलेल्या कार्यात्मक इंटरफेसची अंमलबजावणी करू शकत नाही Un कार्यात्मक इंटरफेस: टीप?

त्या प्रश्नाचे उत्तर होय आहे, आपण हे करण्यासाठी लॅम्बडा अभिव्यक्ती वापरू शकता तुलनाकर्ता: आणि तुलनात्मक जावा मधील इंटरफेस, केवळ हे दोन इंटरफेसच नाही, तर कोणत्याही इंटरफेससाठी ज्यात फक्त एक अमूर्त पद्धत आहे, कारण त्यांना SAM (सिंगल अॅबस्ट्रॅक्ट मेथड) प्रकार म्हणून ओळखले जाते, जावामधील लॅम्बडा एक्सप्रेशन याला समर्थन देते.

या कारणास्तव, जावा 8 मध्ये, लॅम्बडा हा शब्द एसएएम प्रकार म्हणूनही ओळखला जातो, जेथे एसएएम म्हणजे एकल अमूर्त पद्धत. तथापि, हे लक्षात ठेवले पाहिजे की जावा 8 इंटरफेसमधून गैर-अमूर्त पद्धती असू शकतात, जसे की डीफॉल्ट: आणि स्थिर पद्धती.

जावा डिझायनर्सनी घेतलेला हा सर्वात हुशार निर्णय आहे, ज्यामुळे लॅम्बडा आणखी उपयुक्त होतो. यामुळे तुम्ही लॅम्बडा एक्सप्रेशन्स वापरू शकता चालण्यायोग्य:, कॉल करण्यायोग्य, अॅक्शनलिस्टनर, JDK API चे इतर अनेक विद्यमान इंटरफेस, ज्यात फक्त एक अमूर्त पद्धत आहेd

आपणही बाहेर जायला हवे! हे: जावा फंक्शनल प्रोग्रामिंग कोर्सेस जावामध्ये लॅम्बडा हा शब्द का आणला गेला याबद्दल अधिक जाणून घेण्यासाठी մասին առավել mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb mb ::::::

तुलनाकर्ता हा जावा 8 चा कार्यात्मक इंटरफेस आहे

तसे, आपल्याला काळजी करण्याची गरज नाही तुलनाकर्ता:, कारण ते साकार करण्यासाठी तयार केले गेले होते Un कार्यात्मक इंटरफेस: खाली दाखविल्याप्रमाणे.

@FunctionalInterfaces
public interface Comparator<T> {
 ....
}

हा कोड स्निपेट JDK 1.8 चा आहे, जर तुम्ही नेटबीन्स वापरत असाल तर तुम्ही हा वर्ग टाइप करून उघडू शकता Ctrl + O: you जर तुम्ही ग्रहण वापरत असाल तर हा धडा उघडा प्रकार शॉर्टकट वापरून उघडा Ctrl + Shift + T:. अधिक येथे पहा जावा डेव्हलपर्ससाठी उपयुक्त ग्रहण शॉर्टकट.

अगदी चालण्यायोग्य: इंटरफेस देखील चिन्हांकित आहे Un कार्यात्मक इंटरफेस: जसे वाटते.

@FunctionalInterface
public interface Runnable {
   .......
}

पण हो अॅक्शनलिस्टनर: भाष्य केलेले नाही Un कार्यात्मक इंटरफेस:, परंतु तरीही तुम्ही ते लॅम्बडा एक्सप्रेशन्समध्ये वापरू शकता कारण ते फक्त एक मिळाले अमूर्त पद्धत म्हणतात कृती पूर्ण ()

public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}

Earlier we have seen some hands-on examples of Java 8 Streams, here we will learn how to use lambda expression by implementing the Comparator interface in Java. This will make creating a custom Comparator very easy and reduce lots of boilerplate code.

By the way, the From Collections to Streams in Java 8 Using the Lambda Expression course only covers lambda expression and streams, it doesn't cover all other Java 8 features e.g. new Date and Time API, new JavaScript engine, and other small enhancements like Base64 encoder-decoder and performance improvements.

For other Java 8 changes, I suggest you check out these Java 8 tutorials and courses from Udemy and Pluralsight. It is a short and concise course but covers all major Java 8 features.


.

How to Implement Comparator using Lambda Expression

As I said before using lambdas to implement a Comparator is a good way to learn how lambda expression works in Java. Since lambda expression in Java is SAM type (Single Abstract Method) you can use it with any interface which got just one method like Comparator, Comparable, Runnable, Callable, ActionListener, and so on.

Earlier we used to use the Anonymous class to implement these one method interfaces, mostly when we want to pass them to a method or just want to use them locally like creating a thread for some temporary task or handling the event.

Now we can use a lambda expression to implement these methods, In these cases, lambdas work exactly like an anonymous class but without the heavy dose of boilerplate code required before as shown in the following diagram:

जावा 8 मध्ये लॅम्बडासह तुलना कशी करावी

Anyway, here is our Java program to implement Comparator using the lambda expression in Java 8:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * How to sort Objects in Java 8, by implementing Comparator using lambda
 * expression.
 *
 * @author WINDOWS 8
 *
 */
public class ComparatorUsingLambdas{

    public static void main(String args[]) {

        // list of training courses, our target is to sort these courses
        // based upon their price or title
        List<TrainingCourses> onlineCourses = new ArrayList<>();
        onlineCourses.add(new TrainingCourses("Java", new BigDecimal("200")));
        onlineCourses.add(new TrainingCourses("Scala", new BigDecimal("300")));
        onlineCourses.add(new TrainingCourses("Spring", new BigDecimal("250")));
        onlineCourses.add(new TrainingCourses("NoSQL", new BigDecimal("310")));


        // Creating Comparator to compare Price of training courses
        final Comparator<TrainingCourses> PRICE_COMPARATOR 
         = new Comparator<TrainingCourses>() {
            @Override
            public int compare(TrainingCourses t1, TrainingCourses t2) {
                return t1.price().compareTo(t2.price());
            }
        };


        // Comparator to compare title of courses
        final Comparator<TrainingCourses> TITLE_COMPARATOR 
         = new Comparator<TrainingCourses>() {
            @Override
            public int compare(TrainingCourses c1, TrainingCourses c2) {
                return c1.title().compareTo(c2.title());
            }
        };


        // sorting objects using Comparator by price
        System.out.println("List of training courses, before sorting");
        System.out.println(onlineCourses);
        Collections.sort(onlineCourses, PRICE_COMPARATOR);
       
        System.out.println("After sorting by price, increasing order");
        System.out.println(onlineCourses);
        System.out.println("Sorting list by title ");      
       Collections.sort(onlineCourses, TITLE_COMPARATOR);
        System.out.println(onlineCourses);


        // Now let's see how less code you need to write if you use
        // lambda expression from Java 8, in place of anonymous class
        // we don't need an extra line to declare comparator, we can
        // provide them in place to sort() method.
       
 
        System.out.println("Sorting objects in decreasing order of price, using lambdas");
        Collections.sort(onlineCourses, (c1, c2) -> c2.price().compareTo(c1.price()));
        System.out.println(onlineCourses);
       
        System.out.println("Sorting list in decreasing order of title, using lambdas");
        Collections.sort(onlineCourses, (c1, c2) -> c2.title().compareTo(c1.title()));
        System.out.println(onlineCourses);
    }
}

class TrainingCourses {
    private final String title;
    private final BigDecimal price;

    public TrainingCourses(String title, BigDecimal price) {
        super();
        this.title = title;
        this.price = price;
    }

    public String title() {
        return title;
    }

    public BigDecimal price() {
        return price;
    }

    @Override
    public String toString() {
        return String.format("%s : %s", title, price);
    }
}

Output:
List of training courses, before sorting
[Java : 200, Scala : 300, Spring : 250, NoSQL : 310]
After sorting by price, increasing order
[Java : 200, Spring : 250, Scala : 300, NoSQL : 310]
Sorting list by title
[Java : 200, NoSQL : 310, Scala : 300, Spring : 250]
Sorting objects in decreasing order of price, using lambdas
[NoSQL : 310, Scala : 300, Spring : 250, Java : 200]
Sorting list in decreasing order of title, using lambdas
[Spring : 250, Scala : 300, NoSQL : 310, Java : 200]

या उदाहरणात आपल्याकडे एक ऑब्जेक्ट म्हणतात अभ्यासक्रम:, जे संस्थांसाठी एक सामान्य प्रशिक्षण कोर्स आहे. साधेपणासाठी, त्याला फक्त दोन गुण मिळाले: शीर्षक - जेथे शीर्षक स्थित आहे स्ट्रिंग: ինը किंमत: बिग दशांश: कारण फ्लोट -डबल अचूक गणनासाठी चांगले नाहीत.

आमच्याकडे आता प्रशिक्षण अभ्यासक्रमांची यादी आहे - आमचे कार्य त्यांना किंमत किंवा शीर्षकानुसार क्रमवारी लावणे आहे. तद्वतच, अभ्यासक्रम: धडा पूर्ण केला पाहिजे तुलनात्मक शीर्षकानुसार, अर्थात नैसर्गिक क्रमाने प्रशिक्षण अभ्यासक्रमांची व्यवस्था करा.

का, आम्ही हे फक्त फोकस करण्यासाठी करत नाही तुलनाकर्ता:.

ही कार्ये पूर्ण करण्यासाठी, आपल्याला दोन नियमित तुलनात्मक अंमलबजावणी तयार करण्याची आवश्यकता आहे, एक क्रमवारी लावण्यासाठी अभ्यासक्रम: शीर्षकानुसार क्रमवारी लावा आणि दुसरा किंमतीनुसार.

कोडच्या ओळींच्या संख्येत तीव्र फरक दर्शविण्यासाठी, आपल्याला JDK 1.8 मध्ये जावा 8 before आधी हे करणे आवश्यक आहे, मी प्रथम हे दोन तुलना करणारे वापरले अनामिक वर्ग օգտագործ नंतर वापरणे: लॅम्बडा अभिव्यक्ती.

आपण हे लॅम्बडास अंमलबजावणी वापरून पाहू शकता तुलनाकर्ता: फक्त एक ओळ घ्या - वाचनाचा त्याग न करता पद्धत म्हटली तरीही तुम्ही हे करू शकता.

हे मुख्य कारण आहे की आपण व्यायामासाठी लॅम्बडा हा शब्दप्रयोग का वापरावा तुलनाकर्ता:, चालण्यायोग्य:, कॉल करण्यायोग्य, किंवा: अॅक्शनलिस्टनर: जावा 8 सह:, ते तुमचा कोड अधिक वाचनीय आणि संक्षिप्त बनवतात.

मी संपूर्ण शिकवणीसाठी जावा 8 ची शिफारस करतो जावा मास्टरक्लास पूर्ण करा उडेमी वर अभ्यासक्रम. जावा शिकण्याचा हा सर्वात अद्ययावत अभ्यासक्रम आहे.

जावा 8 पद्धतीचा संदर्भ वापरून तुलनाकर्ता करा

तसे, जोडलेल्या नवीन पद्धती वापरून तुम्ही आणखी चांगले करू शकता तुलनाकर्ता: जावा 8 मध्ये इंटरफेस वापरून पद्धत दुवे: खाली दाखविल्याप्रमाणे.

जावा 8 तुलना उदाहरण:

तुम्ही तुलनाकर्त्यासारख्या नवीन पद्धती वापरून हे पाहू शकता तुलना () հղ पद्धत संदर्भ, आपण जावा 8 नंतर फक्त एका ओळीत तुलनाकर्ता ठेवू शकता. मी सध्याच्या जावा शब्दासह या शैलीच्या कोडची अत्यंत शिफारस करतो.

हे सर्व जोडलेले आहे जावा 8 लॅम्बडा एक्सप्रेशन वापरून तुलनाकर्ता कसा बनवायचा. आपण पाहू शकता की सानुकूल तयार करण्यासाठी खूप कमी कोड लागतो तुलनाकर्ता: निनावी वर्गापेक्षा लॅम्बडाचा वापर. जावा 8 व्यतिरिक्त निनावी वर्ग वापरण्यात काहीच अर्थ नाही, प्रत्यक्षात लॅम्बडास वापरा जिथे आपण निनावी वर्ग वापरत असाल.

आपण लॅम्बडास सारखे SAM इंटरफेस कार्यान्वित केल्याची खात्री करा चालण्यायोग्य:, ला परी, अॅक्शनलिस्टनर, जर तुम्हाला जावा 8 शिकायचे असेल तर तुम्ही खालील संसाधनांचा संदर्भ घेऊ शकता:

जावा 8 संबंधित ट्यूटोरियल

जर तुम्हाला जावाच्या नवीन वैशिष्ट्यांबद्दल अधिक जाणून घेण्यास स्वारस्य असेल - सर्वसाधारणपणे, माझे पूर्वीचे लेख येथे आहेत जे जावा 8 मधील काही महत्त्वाच्या संकल्पनांचा समावेश करतात.

  • 20 Java तास जावा (तारीख (शैक्षणिक:)
  • जावा 8 ची डीफॉल्ट पद्धत काय आहे? (उदाहरण)
  • जावा 8 (मॅन्युअल) मध्ये फिल्टर () पद्धत कशी वापरावी
  • शीर्ष 5 लॅम्बडास Java जावा मधील प्रवाह अभ्यासक्रम (अभ्यासक्रम)
  • जावा 8 मध्ये की द्वारे नकाशा कसा क्रमवारी लावावा. (उदाहरण:)
  • जावा प्रोग्रामर होण्यासाठी शीर्ष 5 अभ्यासक्रम (अभ्यासक्रम)
  • स्क्रॅचमधून जावा 8 बद्दल जाणून घेण्यासाठी 5 पुस्तके (पुस्तके)
  • जावा 8 मध्ये प्रवाह वर्ग कसा वापरावा (मॅन्युअल)
  • जावा मध्ये कार्यात्मक प्रोग्रामिंग शिकण्यासाठी शीर्ष 5 अभ्यासक्रम (अभ्यासक्रम)
  • जावा 8 मधील नकाशामध्ये सूची कशी बदलावी (उपाय)
  • जावा 8 मध्ये स्ट्रिंगशी कसे कनेक्ट करावे (उदाहरणार्थ)
  • जावा 8 मधील अमूर्त वर्ग և इंटरफेस between मधील फरक. (उत्तर)
  • अनुभवी जावा प्रोग्रामरसाठी 10 मोफत अभ्यासक्रम (अभ्यासक्रम)
  • जावा 8 (उदाहरण) मध्ये पीक () पद्धत कशी वापरावी
  • जावा 8 मध्ये मूल्यानुसार मेयोनेझची क्रमवारी कशी लावायची? (उदाहरण)
  • जावा 8 मध्ये LocalDateTime वापरून तारखेचे स्वरूपन / विश्लेषण कसे करावे? (शैक्षणिक:)
  • जावा 8 և 9 शिकण्यासाठी 5 विनामूल्य अभ्यासक्रम (अभ्यासक्रम)

हा लेख आतापर्यंत वाचल्याबद्दल धन्यवाद. जर तुम्हाला हा लेख आवडला असेल तर कृपया तुमच्या मित्र आणि सहकाऱ्यांसह शेअर करा. आपल्याकडे काही प्रश्न किंवा सूचना असल्यास, कृपया एक टीप सोडा.

पुनश्च - जर तुम्ही जावा 8 फंक्शनल प्रोग्रामिंग बद्दल गंभीर असाल पण फक्त एक विनामूल्य ऑनलाईन ट्यूटोरियल शोधत असाल तर तुम्ही ते देखील तपासू शकता मोफत जावा अभ्यासक्रम उडेमी वर. हे पूर्णपणे विनामूल्य आहे, या कोर्समध्ये सामील होण्यासाठी आपल्याला फक्त एक उडेमी खाते आवश्यक आहे.