前言
简单整理一下List的集合的排序,简单的记录一下,方便自己后续查阅。
正文
这里介绍一下使用Comparable和Comparator进行排序
Comparable
在实现的FileInfo实现Comparable,然后实现排序compareTo()即可。具体如下
public class FileInfo implements Comparable<FileInfo> { private String mPath = null; private String mName = null; private String mDate = null; public String getPath() { return mPath; } public void setPath(String path) { mPath = path; } public String getName() { return mName; } public void setName(String name) { mName = name; } public String getDate() { return mDate; } public void setDate(String date) { mDate = date; } @Override public int compareTo(FileInfo o) { return Collator.getInstance(Locale.ROOT).compare(getName(), o.getName()); } }
注意,我这里是以字母排序A-Z顺序排序。
如果要使用其他的比较方法,只需要改变compareTo()中的比较即可。
还可以比较文件大小。
@Override public int compareTo(FileInfo o) { return (int) (getSize()-o.getSize()); }
通实现Comparable接口,就可以使用下面方法进行排序。
List<FileInfo> listFile = new ArrayList<>(); //添加数据 listFile.add(...); //排序 Collections.sort(listFile);
Comparator
这种方式FileInfo不需要实现其他接口,如下。
public class FileInfo { private String mPath = null; private String mName = null; private String mDate = null; public String getPath() { return mPath; } public void setPath(String path) { mPath = path; } public String getName() { return mName; } public void setName(String name) { mName = name; } public String getDate() { return mDate; } public void setDate(String date) { mDate = date; } }
这里可以分三种方式单独记录。
方式1
listFile.sort(new Comparator<FileInfo>() { @Override public int compare(FileInfo o1, FileInfo o2) { return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName()); } });
方式2
Collections.sort(listFile, new Comparator<FileInfo>() { @Override public int compare(FileInfo o1, FileInfo o2) { return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName()); } });
方式3
JDK 8之后还可以使用
listFile= listFile.stream().sorted(new Comparator<FileInfo>() { @Override public int compare(FileInfo o1, FileInfo o2) { return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName()); } }).collect(Collectors.toList());
参考文章
《》
© 版权声明