Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用比较器代替比较法_Java_Comparator - Fatal编程技术网

Java 用比较器代替比较法

Java 用比较器代替比较法,java,comparator,Java,Comparator,我有这样的情况: Stock.stream .max(this::my_method) .map.... public int my_method(Stock stock1, Stock stock2) { int total1 = get_sum(stock1); int total2 = get_sum(stock2); if (total1 == total2) { return stock1.get_quantity() - stock2.g

我有这样的情况:

Stock.stream
.max(this::my_method)
.map....

public int my_method(Stock stock1, Stock  stock2) {
    int total1 = get_sum(stock1);
    int total2 = get_sum(stock2);

    if (total1 == total2) {
        return stock1.get_quantity() - stock2.get_quantity();
    }
    return total1 - total2;
}

 public Integer get_sum(Stock stock) {
    return stock.get_quantity() - stock.get_wasted();
}

有没有一种方法可以使用Java Comparator编写它,或者它适用于其他情况?

您可以将
Comparator
与lambda一起使用。例如,如果您有以下课程:

class Stock {
   int price;
}
您可以将
max
与使用
价格的比较器一起使用,例如:

List<Stock> stocks; //list
Stock max = stocks.stream()
    .max(Comparator.comparing((a) -> a.price))
    .get();
上市//列表
Stock max=stocks.stream()
.max(比较器比较((a)->a.价格))
.get();

这听起来像是一项家庭作业,是吗?好吧,只需创建一个比较器,并将
my\u method()
的内容放入其
compare()
方法(您可能需要进行
get\u sum())
可用于比较器,但由于比较器只使用参数,因此它可以是一个静态方法或自身的函数)。然后在
max(…)
中使用该比较器,例如
max(MyComparator::new)
。问题不是很清楚。您有一个方法可以作为比较器功能接口的实现。你想改变它什么?…除非方法的重点是实际计算差异,在这种情况下,它可能应该保持原样。