当前位置:   article > 正文

Java ArrayList按字母顺序排序(不区分大小写)

arraylisit怎么按姓名的字母顺序排序

我有一个包含人名的字符串arraylist names。 我想按字母顺序对arraylist进行排序。

ArrayList names = new ArrayList();

names.add("seetha");

names.add("sudhin");

names.add("Swetha");

names.add("Neethu");

names.add("ananya");

names.add("Athira");

names.add("bala");

names.add("Tony");

names.add("Karthika");

names.add("Nithin");

names.add("Vinod");

names.add("jeena");

Collections.sort(names);

for(int i=0; i

System.out.println(names.get(i));

我试图以上述方式对列表进行排序。 但是它将排序后的数组显示为:

Athira

Karthika

..

..

ananya

bala

...

但我不想区分大小写。 我想要的结果是:

ananya

Athira

bala

自定义Comparator应该会有所帮助

Collections.sort(list, new Comparator() {

@Override

public int compare(String s1, String s2) {

return s1.compareToIgnoreCase(s2);

}

});

或者,如果您使用的是Java 8:

list.sort(String::compareToIgnoreCase);

您能告诉我什么是字符串s1和s2吗?如果比较函数返回整数值,怎么看结果呢?

发布前没有注意到评论。

@seethalakshmi那就是您列表中的字符串。如果您想了解更多有关Collections.sort方法的信息,请查看

我想在logcat中显示排序列表。我该怎么做?

除非您在排序后用循环将列表分解,否则它将显示为对象。 for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }

@ denis.solonenko,感谢您的回答。香港专业教育学院尝试从A1到A10的ArrayList解决方案,但A10排序不正确。不知何故,A10紧随A1之后。基本上,它的排序方式类似于A1,A10,A2,A3等。为什么会发生这种情况,如何正确排序列表?

@Dante如果您看一下String.CASE_INSENSITIVE_ORDER的实现,那么您会发现A1与A10相比less比A10更脏。没有开箱即用的"自然排序"支持,您可能想看看stackoverflow.com/questions/1262239/

使用此代码工作正常。我需要从arraylist获取两个日期(开始,结束)之间的数据。如何更改该代码?

正是我需要的,谢谢!

@Dante也许我来晚解释这个,但是其他人可以看到并理解。问题是为什么A10在A1和A2之间。因为在使用字符串进行短路时会像AA,AB,BA,BB一样逐个查找单词。因此它将对第一个单词排序,然后对第二个单词排序。因此,A10和A2将首先短路A,然后将其与2排序。长度不受此影响。因此,要使其排序,只需在A,A02,...,A10之类的2之前添加0。

compareToIgnoreCase是不正确的,因为在比较"a"和"a"时,它返回0。在排序上下文中,这是不正确的。字符的大写和小写版本应按明确定义的顺序放置。

最简单的操作是:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

@djunod,感谢您的回答。我也尝试过从A1到A10的ArrayList解决方案,但是A10不能像denis.solenenkos解决方案那样正确排序。不知何故,A10紧随A1之后。基本上,它的排序方式类似于A1,A10,A2,A3等。为什么会发生这种情况,如何正确排序列表?

@dante,这是正常的字符串排序。如果您希望A2在A10之前出现,则必须将其更改为A02,依此类推。

加1.在Android中也可以使用。谢谢,恭喜。

@djunod非常感谢你:)

试试这个代码

Collections.sort(yourarraylist, new SortBasedOnName());

import java.util.Comparator;

import com.RealHelp.objects.FBFriends_Obj;

import com.RealHelp.ui.importFBContacts;

public class SortBasedOnName implements Comparator

{

public int compare(Object o1, Object o2)

{

FBFriends_Obj dd1 = (FBFriends_Obj)o1;// where FBFriends_Obj is your object class

FBFriends_Obj dd2 = (FBFriends_Obj)o2;

return dd1.uname.compareToIgnoreCase(dd2.uname);//where uname is field name

}

}

好答案!我认为,如果您将实现Comparator更改为Comparator 并将对象类型更改为FBFriends_Obj,则不需要dd1和dd2,则可以在return语句中直接使用o1和o2

根据上面提到的答案,我设法比较了自定义类对象,如下所示:

ArrayList itemList = new ArrayList<>();

...

Collections.sort(itemList, new Comparator() {

@Override

public int compare(Item item, Item t1) {

String s1 = item.getTitle();

String s2 = t1.getTitle();

return s1.compareToIgnoreCase(s2);

}

});

您需要使用自定义比较器,它将使用compareToIgnoreCase,而不是compareTo。

我尝试了这个链接。但是我找不到解决方案。请您解释一下

从Java 8开始,您可以使用Stream:

List sorted = Arrays.asList(

names.stream().sorted(

(s1, s2) -> s1.compareToIgnoreCase(s2)

).toArray(String[]::new)

);

它从该ArrayList获取流,然后对其进行排序(忽略大小写)。之后,该流将转换为数组,该数组将转换为ArrayList。

如果使用以下命令打印结果:

System.out.println(sorted);

您得到以下输出:

[ananya, Athira, bala, jeena, Karthika, Neethu, Nithin, seetha, sudhin, Swetha, Tony, Vinod]

不幸的是,到目前为止,所有答案都没有考虑到"a"在排序时不得视为等于"a"。

String[] array = {"b","A","C","B","a"};

// Approach 1

Arrays.sort(array);

// array is [A, B, C, a, b]

// Approach 2

Arrays.sort(array, String.CASE_INSENSITIVE_ORDER);

// array is [A, a, b, B, C]

// Approach 3

Arrays.sort(array, java.text.Collator.getInstance());

// array is [a, A, b, B, C]

在方法1中,任何小写字母都被认为大于任何大写字母。

由于CASE_INSENSITIVE_ORDER认为"a"和"a"相等(比较结果为0),因此方法2变得更糟。这使排序变得不

方法3(使用java.text.Collat??or)是正确的恕我直言的唯一方法,因为它认为"a"和"a"不相等,但会根据当前(或任何其他所需的)将它们按正确的顺序放置)区域设置。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/715644
推荐阅读
相关标签
  

闽ICP备14008679号