2017-12-20 14 views
-3

Dies ist ein ziemlich einfaches Problem, aber ich konnte nicht herausfinden, was Java von mir will. Gerade jetzt zu demonstrieren, habe ich einfach den Code haben:Wie initialisiere ich einen Komparator? Es sagt Variable wurde möglicherweise nicht initialisiert

Comparator<Integer> c;  

if (c.compare(5, 3) < 0) { 
    System.out.println("yep, it's less"); 
} 

Während natürlich auch der Komparator Import import java.util.Comparator;

NetBeans sagt mir „Variable c kann nicht initialisiert“. Was kann ich tun, um c zu initialisieren?

Prost

+0

https://www.mkyong.com/java/java-object-sorting-example-comparable -und-comparator/ –

+1

Sie müssen den Vergleicher sinnvoll definieren. –

+0

Sie brauchen keinen Komparator, wenn Sie ihn nur in der nächsten Zeile verwenden. Könnte genauso gut 'if (5 <3)' schreiben. Die Idee besteht darin, den Code, der die Logik definiert, von dem Code zu entkoppeln, der ihn verwenden soll. Du wirst es also in eine Methode umwandeln wollen. – Thilo

Antwort

-1

Dies ist, was Sie (Java 8) jedoch

import java.util.Comparator; 

public class ComparatorDemo { 
    public static void main(String... args) { 

     // (1) Defining a custom comparator using lambda 
     // Comparator<Integer> c = (Integer a, Integer b) -> a - b; 

     // (2) comparingInt takes a lambda which maps from object you want to compare to an int 
     Comparator<Integer> c = Comparator.comparingInt(a -> a); 

     if (c.compare(3, 5) < 0) 
      System.out.println("Yes, It's less"); 
    } 
} 

Mit einem Komparator wollen, würde mehr Sinn bei etwas komplexeren Klassen machen. Zum Beispiel, hier ist das, was Sie tun würden, wenn Sie einen Komparator wollten zwei Punkte mit ihren vergleichen x-Koordinate

import java.util.Comparator; 

class Point { 
    private int x; 
    private int y; 

    public Point(int x, int y) { this.x = x; this.y = y; } 
    public int getY() { return y; } 
    public void setY(int y) { this.y = y; } 
    public int getX() { return x; } 
    public void setX(int x) { this.x = x; } 
} 

public class ComparatorDemo { 
    public static void main(String... args) { 
     Comparator<Point> pc = Comparator.comparing(Point::getX); 
     Point p1 = new Point(1, 2); 
     Point p2 = new Point(2, 2); 
     if (pc.compare(p1, p2) < 0) { 
      System.out.println("Yes, it's less"); 
     } 
    } 
} 
Verwandte Themen