2017-12-20 25 views
-3

これはかなり単純な問題ですが、Javaが私に求めていることを理解できませんでした。今、私は単純にコードを持って、実証する:コンパレータを初期化するには?変数が初期化されていない可能性があります

Comparator<Integer> c;  

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

ももちろんコンパレータにimport java.util.Comparator;

のNetBeansをインポートしている間は、私に語った「変数cがを初期化されていないかもしれません」。 cを初期化するにはどうすればよいですか?これは、あなたが(Javaの8)何をしたいです

乾杯

+0

https://www.mkyong.com/java/java-object-sorting-example-comparableを使用して2点を比較するコンパレータを望んでいた場合はどうなるのかですコンパレータ/ –

+1

意味のある方法でコンパレータを定義する必要があります。 –

+0

次の行でのみ使用する場合は、コンパレータは必要ありません。ちょうど同様に 'if(5 <3)'と書くこともできます。その考え方は、ロジックを定義するコードを、それを使用する必要があるコードから切り離すことです。だからあなたはそれをメソッドに渡したいと思うだろう。 – Thilo

答えて

-1

コンパレータを使用して
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"); 
    } 
} 

しかし、少し複雑なクラスの場合に、より理にかなって。たとえば、ここにあなたが彼らのx座標

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"); 
     } 
    } 
} 
関連する問題