【问题标题】:Sorting ObservableList understanding Comparator and Predicate排序 ObservableList 理解 Comparator 和 Predicate
【发布时间】:2015-03-23 15:28:44
【问题描述】:

我有一个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,但没有运气。

老实说,关于排序和过滤的文档有点“过滤”;) 我喜欢了解 Comparator 和 Predicate 的使用...对于初学者...

到目前为止,我尝试将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 找到的现有示例。

任何帮助都会很棒。

【问题讨论】:

    标签: java javafx-8


    【解决方案1】:
    sorted.setComparator(new Comparator<Auftrag>() {
       @Override
       public int compare(Auftrag arg0, Auftrag arg1) {
          return arg0.getDaysTillDelivery() > arg1.getDaysTillDelivery() ? arg0.getDaysTillDelivery(): arg1.getDaysTillDelivery();
       }
    });
    

    那行不通。

    Comparator 的文档有什么不清楚的地方?引用 javadoc 本身关于 compare() 方法的内容如下(强调我的):

    比较它的两个参数的顺序。 返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数

    这对我来说已经足够清楚了。

    您的比较器应为(注意:Java 8 代码)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多