【问题标题】:How to rearrange objects in arraylist based on card type [duplicate]如何根据卡片类型重新排列arraylist中的对象[重复]
【发布时间】:2021-12-07 10:09:28
【问题描述】:

我有一个场景,我必须以特定顺序重新排列银行名称的元素。 此列表可以按任何顺序排列 [Wellsfargo、Bank of America、Chase、Citi、American Express],并且列表中可能没有一家或多家银行。 我试图想出逻辑来重新排列这个顺序。 [大通、花旗、美国银行、富国银行、美国运通]

非常感谢任何帮助

【问题讨论】:

  • 那么,“卡片类型”是按字母顺序排列的,对吗?你看过 Collections Java 框架吗? dev.java/learn/the-collections-framework
  • 不是字母顺序。需要根据银行发行的卡类型定制订购
  • 你知道List.sort()吗?尝试想出一个合适的Comparator
  • 是的,我知道。我想到了比较器,但在想,它可能行不通。我需要检查多个字段以按顺序排列银行。你能告诉我一个如何实现多层比较器的例子吗
  • stackoverflow.com/questions/6850611/…,用于使用自定义比较器

标签: java arrays spring-boot sorting


【解决方案1】:

正如 cmets 中所注意到的,您可以将 sort 与自定义 Comparator 比较元素的 indexOfList 与所需的顺序:

private static final List<String> ORDER_LIST = List.of("Chase", "Citi", "Bank Of America", "Wellsfargo", "American Express");

public static List<String> sort(String... names) {
    return Stream.of(names)
            .sorted(Comparator.comparingInt(ORDER_LIST::indexOf))
            .collect(Collectors.toList());
}

那么你可以这样做:

List<String> names = sort("American Express", "Citi", "Chase");
    
System.out.println(names);

输出:

[Chase, Citi, American Express]

【讨论】:

  • 我需要在对象内部查看更多变量,例如卡是否是美国银行花旗的 Master/Visa。如果它是默认卡。
  • 您应该创建一个新问题,详细说明您想要实现的目标,并与您迄今为止尝试过的内容分享代码
猜你喜欢
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多