如何使用“对象名称”字段按字母顺序对列表<对象>进行排序

2022-08-31 09:23:56

我有一个对象列表,如.我想使用对象名称字段按字母顺序对此列表进行排序。对象包含 10 个字段,名称字段是其中之一。List<Object> p

if (list.size() > 0) {
    Collections.sort(list, new Comparator<Campaign>() {
        @Override
        public int compare(final Object object1, final Object object2) {
        return String.compare(object1.getName(), object2.getName());
        }
    } );
}

但是没有像String.compare..?


答案 1

从您的代码中,看起来您的代码已经使用 参数化了。这仅适用于 。另外,您要查找的方法是。ComparatorCampaignList<Campaign>compareTo

if (list.size() > 0) {
  Collections.sort(list, new Comparator<Campaign>() {
      @Override
      public int compare(final Campaign object1, final Campaign object2) {
          return object1.getName().compareTo(object2.getName());
      }
  });
}

或者,如果您使用的是 Java 1.8

list
  .stream()
  .sorted((object1, object2) -> object1.getName().compareTo(object2.getName()));

最后一点意见 - 检查列表大小没有意义。排序将适用于空列表。


答案 2

按字母顺序排列字符串的最正确方法是使用 ,因为国际化。由于很少的额外字符等,某些语言具有不同的顺序。Collator

   Collator collator = Collator.getInstance(Locale.US);
   if (!list.isEmpty()) {
    Collections.sort(list, new Comparator<Campaign>() {
        @Override
        public int compare(Campaign c1, Campaign c2) {
            //You should ensure that list doesn't contain null values!
            return collator.compare(c1.getName(), c2.getName());
        }
       });
   }

如果你不关心国际化使用。string.compare(otherString)

   if (!list.isEmpty()) {
    Collections.sort(list, new Comparator<Campaign>() {
        @Override
        public int compare(Campaign c1, Campaign c2) {
            //You should ensure that list doesn't contain null values!
            return c1.getName().compare(c2.getName());
        }
       });
   }