Java 某物';What’我的可比性的实现有什么问题吗
所以我尝试使用树形图来创建一个数据集合,然后我想在使用我自己的比较器时得到一个排序列表 我的问题是Collections.sort抛出并出错,因为Java 某物';What’我的可比性的实现有什么问题吗,java,collections,iterable,Java,Collections,Iterable,所以我尝试使用树形图来创建一个数据集合,然后我想在使用我自己的比较器时得到一个排序列表 我的问题是Collections.sort抛出并出错,因为只能迭代java.lang.Iterable的数组或实例,但我的ExtsList是ArrayList类型,正如这里所示,它确实是Iterable List extsListed=newarraylist(exts.values()); for(FileInfo:Collections.sort(extsListed)){ System.out.prin
只能迭代java.lang.Iterable的数组或实例
,但我的ExtsList是ArrayList类型,正如这里所示,它确实是Iterable
List extsListed=newarraylist(exts.values());
for(FileInfo:Collections.sort(extsListed)){
System.out.println(info.key+“”+info.count+“”+info.size);
}
System.out.println(totalFound.toString()+“”+totalSize);
}
公共静态类FileInfo实现了可比较的{
字符串键;
整数计数;
长尺寸;
公共文件信息(字符串键、文件){
计数=1;
this.key=key;
this.size=file.length();
}
公共整数比较(文件信息其他){
如果(this.size>other.size)返回1;
else if(this.size==other.size){
如果(this.key.compareTo(other.key)>=1)返回1;
else if(this.key.equals(other.key))返回0;
否则返回-1;
}
否则返回-1;
}
}
集合。排序
返回无效
。它不会为您返回已排序的集合。在调用sort
之后,您可以简单地迭代集合本身:
Collections.sort(extsListed);
for (FileInfo info : extsListed) {
...
收藏是一种空虚。所以它不会返回值:
更改:
List<FileInfo> extsListed = new ArrayList<FileInfo>(exts.values());
for (FileInfo info : Collections.sort(extsListed)) {
System.out.println(info.key + ' ' + info.count + ' ' + info.size);
}
List extsListed=newarraylist(exts.values());
for(FileInfo:Collections.sort(extsListed)){
System.out.println(info.key+“”+info.count+“”+info.size);
}
致:
List extsListed=newarraylist(exts.values());
Collections.sort(extsListed);
对于(文件信息:extsListed){
System.out.println(info.key+“”+info.count+“”+info.size);
}
在Java 8中,您可以编写
public static class FileInfo implements Comparable<FileInfo>{
String key;
int count; // don't use a wrapper unless you want it to be null.
long size;
public FileInfo(String key, File file){
count = 1;
this.key = key;
this.size = file.length();
}
public int compareTo(FileInfo other) {
int cmp = Integer.compare(size, other.size);
if (cmp == 0)
cmp = key.compareTo(other.key);
return cmp;
}
}
另一种方法是根本不使用可比较的方法
public static class FileInfo implements Comparable<FileInfo>{
final String key;
final int count; // don't use a wrapper unless you want it to be null.
final long size;
public FileInfo(String key, File file){
count = 1;
this.key = key;
this.size = file.length();
}
public String getKey() { return key; }
public long getSize() { return size; }
public String toString() { return key + ' ' + size + ' ' + count; }
}
exts.values().stream()
.sort(comparing(FileInfo::getSize).andThen(FileInfo::getKey))
.forEach(System.out::println);
公共静态类FileInfo实现可比较{
最后的字符串键;
final int count;//除非希望包装为null,否则不要使用包装。
最终长尺寸;
公共文件信息(字符串键、文件){
计数=1;
this.key=key;
this.size=file.length();
}
公共字符串getKey(){return key;}
public long getSize(){return size;}
公共字符串toString(){return key+''+size+''+count;}
}
exts.values().stream()
.sort(比较(FileInfo::getSize).然后(FileInfo::getKey))
.forEach(System.out::println);
一些可能有用的链接
我喜欢这个。我一直在问为什么没有这样的东西+50@DominikDitoIvosevic顺便说一句,如果您没有使用Java8,也许您应该这样做。Java 7将于4月下线。我用Java编写了大约15个小时的代码,所以它不像“不使用java8”那样多,更多的是“不使用任何Java”:D你能给我一些谷歌搜索词吗?我应该用它们来查找更多关于Java的功能用法sort@DominikDitoIvosevic我添加了一些关于主题的链接。如果你想知道更多的话,你可以从中找到一些术语。@DominikDitoIvosevic对我来说是Java的15年;)@DominikDitoIvosevic你可以调试并找出原因。
public static class FileInfo implements Comparable<FileInfo>{
String key;
int count; // don't use a wrapper unless you want it to be null.
long size;
public FileInfo(String key, File file){
count = 1;
this.key = key;
this.size = file.length();
}
public int compareTo(FileInfo other) {
int cmp = Integer.compare(size, other.size);
if (cmp == 0)
cmp = key.compareTo(other.key);
return cmp;
}
}
extsListed.sort();
public static class FileInfo implements Comparable<FileInfo>{
final String key;
final int count; // don't use a wrapper unless you want it to be null.
final long size;
public FileInfo(String key, File file){
count = 1;
this.key = key;
this.size = file.length();
}
public String getKey() { return key; }
public long getSize() { return size; }
public String toString() { return key + ' ' + size + ' ' + count; }
}
exts.values().stream()
.sort(comparing(FileInfo::getSize).andThen(FileInfo::getKey))
.forEach(System.out::println);