在java中使用lambda对另一个类中的对象列表进行排序

x0fgdtte  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(311)

在我的taks中,我需要用lambda对名字进行排序。lambdacomparator扩展了class car。
我让lambdacomparator类如下:

public class LambdaComparator extends Car

public LambdaComparator(String name) {super(name);}

在这个类中,我需要对car类型的对象进行排序。
在main类中,我有一个对象列表,我需要用函数对它进行排序。
在lambdacomparator的课堂上,我有一个:

Collections.sort(list, new Comparator<Car>() {
         public int compare(Car x, Car y) {
            return x.getName().compareTo(y.getName()));
         }
      });

我应该如何在main中调用函数来对其进行排序,我应该如何在类中使void类型的函数以某种方式调用它。
编辑:lambda表达式

class LambdaSort<T extends Car>
private List<T> listOfCars;

public LambdaComparator(){
this.listOfCars = new ArrayList<T>();
}

 public void sortCars(T cars)
listOfCars.sort((Car o1, Car o2)->o1.getName().compareTo(o2.getName());

在main函数中,我将car类型的对象添加到该列表中。

zf2sa74q

zf2sa74q1#

lambda比较器应该是这样的。

Comparator<Car> comp = (c1, c2)-> c1.getName().compareTo(c2.getName());

在上面的例子中,比较器在一个特定的字段上进行比较 Car 班级, name . 因为name可能返回一个字符串,所以可以使用 compareTo 因为string类实现了 Comparable (不是 Comparator )用于比较字符串的接口。
但是使用比较器接口中的一种方法可以更容易地指定lambda。这个 comparing 方法可以采用lambda或方法引用(如下所示)。

Comparator<Car> comp = Comparator.comparing(Car::getName);

然后,当它被传递给sort方法时,sort方法将把它应用于sort as下的对象 comp.compare(obj1, obj2) (尽管它可能不被称为 comp 在使用它的方法中)
有关更多信息,请查看java教程

ssm49v7z

ssm49v7z2#

看看兰姆达在这里是什么。
如果你的主类中有一个列表,那么只需对它进行排序就可以了。你甚至不需要上课 LambdaComparator .

List<Car> list = new ArrayList<>();
        Collections.sort(list, (a, b) -> a.getName().compareTo(b.getName()));

相关问题