对ObservableList进行排序了解Comparator和Predicate

时间:2015-03-23 07:13:12

标签: java javafx-8

我有ObservableList<Auftrag>,其中包含一些数据。

private ObservableList<Auftrag> data = FXCollections.observableArrayList();
// add some test data
data.add(new Auftrag("AB1", "Car 1",1));
data.add(new Auftrag("AB1", "Car 2",22));
data.add(new Auftrag("AB1", "Car 3",2));
data.add(new Auftrag("AB2", "Fruit A",33));
data.add(new Auftrag("AB2", "Fruit B",45));   
data.add(new Auftrag("AB3", "Music 1",101));
data.add(new Auftrag("AB3", "Music 2",102));
data.add(new Auftrag("AB3", "Music 3",103));

现在我想返回一个按第三个数据参数(int)ASC排序的有序列表。我尝试使用SortedList设置比较器,但没有运气。

老实说,有关排序和过滤的文档有点“过滤”;) 我喜欢理解比较器和谓词使用......对于初学者......

到目前为止,我尝试将ObservableList放入sortedList并使用比较器。 getDaysTillDelivery()是Auftrag模型中的一个函数,它返回int值。

SortedList<Auftrag> sorted = data.sorted();
sorted.setComparator(new Comparator<Auftrag>() {
   @Override
   public int compare(Auftrag arg0, Auftrag arg1) {
      return arg0.getDaysTillDelivery() > arg1.getDaysTillDelivery() ? arg0.getDaysTillDelivery(): arg1.getDaysTillDelivery();
   }
});

通过使用谓词,我无法使用google找到的现有示例。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

sorted.setComparator(new Comparator<Auftrag>() {
   @Override
   public int compare(Auftrag arg0, Auftrag arg1) {
      return arg0.getDaysTillDelivery() > arg1.getDaysTillDelivery() ? arg0.getDaysTillDelivery(): arg1.getDaysTillDelivery();
   }
});

那不会奏效。

Comparator的文档还不清楚?引用关于compare()方法的javadoc本身读取(强调我的):

  

比较其订单的两个参数。 返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个

对我来说这很清楚。

您的比较器应该读取(注意:Java 8代码)

sorted.setComparator(Comparator.comparing(Auftrag::getDaysTillDelivery));