如何使用对象名称字段按字母顺序对List <Object>进行排序

Sau*_*mar 93 java list

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

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());
        }
    } );
}
Run Code Online (Sandbox Code Playgroud)

但是没有像String.compare那样的东西..?

Rob*_*t B 217

从您的代码中,您Comparator的参数化似乎已经过了Campaign.这只适用于List<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());
      }
  });
}
Run Code Online (Sandbox Code Playgroud)

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

list
  .stream()
  .sorted((object1, object2) -> object1.getName().compareTo(object2.getName()));
Run Code Online (Sandbox Code Playgroud)

最后一条评论 - 检查列表大小没有意义.排序将在空列表中工作.

  • 您可以使用`Comparator.comparing(Campaign :: getName)` (8认同)
  • `list.sort((object1,object2) - > object1.getName().compareTo(object2.getName()));`为我工作 (4认同)
  • 我认为这是最好的答案,将所有内容提炼为OP正在寻找的东西.从评论中,我认为他想要不区分大小写,所以只需将compareTo切换为compareToIgnoreCase (2认同)

vik*_*tor 14

按字母顺序排序字符串的最正确方法是使用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());
        }
       });
   }
Run Code Online (Sandbox Code Playgroud)

如果你不关心国际化使用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());
        }
       });
   }
Run Code Online (Sandbox Code Playgroud)


tob*_*yer 11

看看Collections.sort()Comparator界面.

字符串比较可以用object1.getName().compareTo(object2.getName())或完成object2.getName().compareTo(object1.getName())(取决于你想要的排序方向).

如果您希望排序与案例无关,请执行此操作object1.getName().toUpperCase().compareTo(object2.getName().toUpperCase()).


Ole*_*hov 8

使用Java 8 Comparator.comparing

list.sort(Comparator.comparing(Campaign::getName));
Run Code Online (Sandbox Code Playgroud)


Jan*_*cak 7

public class ObjectComparator implements Comparator<Object> {

    public int compare(Object obj1, Object obj2) {
        return obj1.getName().compareTo(obj2.getName());
    }

}
Run Code Online (Sandbox Code Playgroud)

请将Object替换为包含name字段的类

用法:

ObjectComparator comparator = new ObjectComparator();
Collections.sort(list, comparator);
Run Code Online (Sandbox Code Playgroud)