当前位置: 首页 > 知识库问答 >
问题:

如何为特定字符串编写自定义 Java 比较器?

西门庆
2023-03-14

你好,我想知道是否有人可以帮助我完成一些我卡住的代码。因此,我正在使用lambda语句编写一个自定义比较器,我想执行以下操作。如果返回.getName()的名称彼此相等,那么我想从.getDirection()中选择一个是字符串“Up”(在这种情况下,它保证其中一个是“Up”,另一个是“Down”),否则我们将根据.getType()在字母顺序上查看哪个更高)。

到目前为止,我有这个:(x, y)-

任何帮助都将不胜感激,谢谢。


共有3个答案

陈俊誉
2023-03-14

您不能将其作为比较器编写。

假设您有以下对象

    < li>A1:名称:A方向:向下类型:1 < li>A3:名称:A方向:向上类型:3 < li>B2:名称:B方向:上类型:2

按照您的逻辑,A1

谢泉
2023-03-14

我创建了一个示例类,希望能有所帮助。

package com;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


/**
 * @author jinleizhang
 */
public class ComparatorTest {
  static class Car {
    String name;
    boolean up;
    String type;

    Car(String name, boolean up, String type) {
      this.name = name;
      this.up = up;
      this.type = type;
    }

    public String getName() {
      return this.name;
    }

    public boolean isUp() {
      return this.up;
    }

    public String getType() {
      return this.type;
    }

    @Override
    public String toString() {
      return "Car{" +
          "name='" + name + '\'' +
          ", up=" + up +
          ", type='" + type + '\'' +
          '}';
    }
  }

  public static void main(String[] args) {
    Car carA = new Car("NewCar", false, "type2020");
    Car carB = new Car("NewCar", true, "type2019");
    Car carC = new Car("OldCar", true, "type1990");

    List<Car> cars = new ArrayList<>();
    cars.add(carA);
    cars.add(carB);
    cars.add(carC);
    Collections.sort(cars, (x, y) -> {
      if (x.getName().equals(y.getName())) {
        return x.isUp() ? -1 : 1;
      }

      return x.getType().compareTo(y.getType());
    });

    for (var car : cars) {
      System.out.println(car);
    }
  }
}

输出

Car{name='OldCar', up=true, type='type1990'}
Car{name='NewCar', up=true, type='type2019'}
Car{name='NewCar', up=false, type='type2020'}
吉和同
2023-03-14

不要试图变得过于贪婪。闭包很好,但目标不是编写最少的代码,而是只编写以易于理解的方式完成工作所需的代码(好吧,大多数时候无论如何......)

(x, y) -> {
    if (x.getName().equals(y.getName()) {
        return "Up".equals(x.getDirection()) ? -1 : 1;
    } else {
        return x.getType().compareTo(y.getType());
    }
}
 类似资料:
  • 问题内容: 我有一个Java类,用户: 我收到一个包含来自Web服务的用户对象的JSON列表: 我试图编写一个自定义反序列化器: 但是我的解串器不起作用。如何为Gson编写自定义JSON解串器? 问题答案:

  • 问题内容: 我有一个Java类,用户: 我收到一个包含来自Web服务的用户对象的JSON列表: 我试图编写一个自定义反序列化器: 但是我的解串器不起作用。如何为Gson编写自定义JSON解串器? 问题答案: 我假设User类具有适当的构造函数。

  • 在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。

  • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

  • 在将此标记为副本之前,请阅读到底部 我希望能够按照字母顺序对字符串数组(或基于一个字符串值的结构片)进行排序,但要基于自定义字母表或unicode字母。 大多数时候,人们建议使用支持不同预定义语言环境/字母表的拼贴器。(请参阅此Java答案),但对于这些语言环境捆绑包中不可用的稀有语言/字母表,可以做些什么? 我想使用的语言在Golangs的归类支持和可用的语言列表中不可用,所以我需要能够定义自定

  • 问题内容: 我需要定义一个数组,其中包含所有以下特殊字符。 我正在用这个 它接受除“和\以外的所有字符 请帮助如何定义这两个。 问题答案: 并且是String类中的特殊字符 是String的开始或结尾 用于创建如新线的某些字符 标签或你的情况逃脱特殊字符,如和 因此,要使它们成为文字,您必须使用和 另一个想法是使用而不是,这样您就不必转义,并且您的字符可以写为或(因为要求转义- 应该写为- 在这里