如何按照字母顺序对数组列表进行排序?
如何按照字母顺序对数组列表进行排序?
我正在尝试根据名称按字母顺序对包含类型、名称、URL和日期的数组列表进行排序。我从Browser.BookmarkColumns中提取了信息,除了类型外。
之前:
默认浏览器 谷歌 www.Google.com 14/12/2013 默认浏览器 BBC www.BBC.com 13/12/2015 默认浏览器 亚马逊 www.Amazon.com 11/11/2014
之后:
默认浏览器 亚马逊 www.Amazon.com 11/11/2014 默认浏览器 BBC www.BBC.com 13/12/2015 默认浏览器 谷歌 www.Google.com 14/12/2013
这是我尝试过的代码,但它没有起作用。
int j = mCur.getCount(); String[] mType = new String[j]; String[] mTitles = new String[j]; String[] murls = new String[j]; long[] date = new long[j]; for (int q=0; q<(j-1); q++) { String a = (mTitles[q]).toLowerCase(); String b = (mTitles[q+1].toLowerCase()); char[] c = a.toCharArray(); char[] d = b.toCharArray(); String temp, temp2, temp3 = null; long temp4 = 0; int lenc = c.length; int lend = d.length; int min =0; int count =0; if (lenc < lend) min = lenc; else min = lend; if (c[count] > d[count]) { temp = mTitles[count]; temp2 = mType[count]; temp3 = murls[count]; temp4 = date[count]; mTitles[count] = mTitles[count + 1]; mType[count] = mType[count + 1]; murls[count] = murls[count + 1]; date[count] = date[count + 1]; mTitles[count + 1] = temp; mType[count + 1] = temp2; murls[count + 1] = temp3; date[count + 1] = temp4; } else if (c[count] == d[count]) { for (int w = 1; w < min; w++) { if (c[w] > d[w]) { temp = mTitles[w]; temp2 = mType[w]; temp3 = murls[w]; temp4 = date[w]; mTitles[w] = mTitles[w + 1]; mType[w] = mType[w + 1]; murls[w] = murls[w + 1]; date[w] = date[w + 1]; mTitles[w + 1] = temp; mType[w + 1] = temp2; murls[w + 1] = temp3; date[w + 1] = temp4; } } } }
如何将一个数组列表按照字母顺序从A到Z排序?
在上述内容中,问题的原因是需要对一个数组列表按照字母顺序进行排序。为了解决这个问题,我们可以使用Java的Collections类的sort方法来对数组列表进行排序。
首先,我们需要创建一个自定义的数组列表,并添加一些元素。在这个例子中,我们创建了一个名为UserContainer的类,并定义了它的属性name和date。然后,我们创建了一个ArrayList对象userList,并将一些UserContainer对象添加到其中。
接下来,我们使用Collections类的sort方法对userList进行排序。我们传递了一个实现了Comparator接口的匿名内部类作为参数,该接口定义了compare方法来比较两个UserContainer对象的name属性。比较方法使用了compareToIgnoreCase方法来忽略大小写进行比较,从而实现了按照字母顺序进行排序。
最后,我们可以通过遍历userList来打印排序后的结果。
代码如下:
private ArrayList<UserContainer> userList=new ArrayList<UserContainer>(); UserContainer usercontainer=new UserContainer() usercontainer.name=Amazon; usercontainer.date=11/11/2014; userList.add(usercontainer); UserContainer usercontainer2=new UserContainer() usercontainer.name=Google; usercontainer.date=11/11/2014; userList.add(usercontainer); UserContainer usercontainer3=new UserContainer() usercontainer.name=BBC; usercontainer.date=11/11/2014; userList.add(usercontainer); Collections.sort(userList, new Comparator<UserContainer>() { public int compare(UserContainer s1, UserContainer s2) { return s1.name.compareToIgnoreCase(s2.name); } });
public class UserContainer { public String name = ""; public String date = ""; }
希望这可以帮助到你。
如何将一个数组列表按照字母顺序从A到Z排序?
在上面的回答中,提供了Java中高效排序数组列表的最佳示例。之前,请阅读上面提到的回答的描述。
我简化了上面的答案,以便更好地理解,并提供了您所需的精确输出。
ArrayListuserList = new ArrayList<>(); userList.add(new UserContainer("www.Google.com", "Google", "14/12/2013")); userList.add(new UserContainer("www.BBC.com", "BBC", "13/12/2015")); userList.add(new UserContainer("www.Amazon.com", "Amazon", "11/11/2014")); Log.i("Before Sorting :", "==========================>>"); for (UserContainer obj : userList) { System.out.println("Default Browser: \t" + obj.name + "\t" + obj.date + "\t" + obj.webSite); } Collections.sort(userList, new Comparator () { public int compare(UserContainer first, UserContainer second) { return first.name.compareToIgnoreCase(second.name); } }); Log.i("After Sorting :", "==========================>>"); for (UserContainer obj : userList) { System.out.println("Default Browser: \t" + obj.name + "\t" + obj.date + "\t" + obj.webSite); }
模型类:
public class UserContainer { public UserContainer(String webSite, String name, String date) { this.webSite = webSite; this.name = name; this.date = date; } public String webSite = ""; public String name = ""; public String date = ""; }
如何按日期排序而不是按名称排序?日期是long类型而不是字符串。
Long.valueOf(date).compareTo(Long.valueOf(date2))
在模型类中,我声明了"long date=0;"。在我的主要比较方法中,我使用了以下代码:
Collections.sort(userList2, new Comparator() { public int compare(HistoryDetails date, HistoryDetails date2) { return Long.valueOf(date).compareTo(Long.valueOf(date2)); } });
然而,我得到了一个"cannot resolve method 'valueOf'"的错误。
// 根据所需的格式,例如:"dd-mm-yyyy" SimpleDateFormat f = new SimpleDateFormat("dd-mm-yyyy"); try { Long dateOne = f.parse(first.date).getTime(); Long dateSecond = f.parse(second.date).getTime(); return dateOne.compareTo(dateSecond); } catch (ParseException e) { e.printStackTrace(); } return 0;
请将上述代码放在Collections接口的'compare()'方法中。上面我提到按日期值排序列表。如果您需要按域排序的代码,我也可以提供给您!
我想说一件事。我只是提供了一种简单开发的方法。
感谢Ravi Hari和Than的帮助。非常感谢。
问题的出现原因是:需要对一个包含多个数组的列表进行按字母顺序排序,但是目前的数据结构不方便进行排序操作。
解决方法是:首先,将这些数组封装到一个类中(例如命名为MyData),这样可以更方便地进行排序操作。然后,将所有新创建的对象放入一个集合中(例如ArrayList)。接下来,通过使用Collections.sort函数,传入列表和Comparator
例如,如果想要使用title字段对整个列表进行排序,可以按照以下方式实现:
定义一个实现了Comparator
compare(MyData o1, MyData o2){return o1.title.compareTo(o2);