class helper {
public int a;
public int b;
}
主要功能
List<helper> helpers = new ArrayList<helper>();
假设任何时候帮助者的内容都是
1 4
1 5
1 6
2 4
3 4
2 5
我想按照下面的排序方式输出
1 6
1 5
2 5
1 4
2 4
3 4
这不是第2列的降序排序,而是第2列中出现的升序。像6在第2列中出现一次并且比其他出现少,因此是第1列。然后5发生两次,所以它也比4
答案 0 :(得分:0)
尝试
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Helper {
public int a;
public int b;
public Helper(int a, int b) {
this.a = a;
this.b = b;
}
public static void main(String[] args) {
List<Helper> helpers = new ArrayList<Helper>();
helpers.add(new Helper(1, 4));
helpers.add(new Helper(1, 5));
helpers.add(new Helper(1, 6));
helpers.add(new Helper(2, 4));
helpers.add(new Helper(3, 4));
helpers.add(new Helper(2, 4));
System.out.println(helpers);
Collections.sort(helpers,new Comparator<Helper>(){
public int compare(Helper h1, Helper h2){
return (countOccurance(h1.b) > countOccurance(h2.b)) ? 1 : -1;
}
private int countOccurance(int b) {
int count = 0;
for(Helper h : helpers){
if(h.b == b) count++;
}
return count;
}});
System.out.println(helpers);
}
@Override
public String toString() {
return "Helper [a=" + a + ", b=" + b + "]";
}
}
答案 1 :(得分:0)
您应该将列中的两个数字存储在HashMap中,其中键是第二列数字,值是您看到该数字的频率。
然后,为了排序,使用Collections.sort,提供比较器。
在compareTo()实现中,查找每个数字的频率并使用它。
答案 2 :(得分:0)
假设您已设置数据和显示记录
List<helper> helpers = new ArrayList<helper>();
helpers.add(new helper(1, 4));
helpers.add(new helper(1, 5));
helpers.add(new helper(1, 6));
helpers.add(new helper(2, 4));
helpers.add(new helper(3, 4));
helpers.add(new helper(2, 5));
[1 4, 1 5, 1 6, 2 4, 3 4, 2 5]
创建HashMap
以保留Integer,List<helpers>
Map<Integer, List<helper>> holder = new HashMap<Integer, List<helper>>();
根据b值加载HashMap。
for (int i=0;i<helpers.size();i++){
List<helper> tmp = holder.get(helpers.get(i).getB());
if (tmp == null){
tmp = new ArrayList<helper>();
}
tmp.add(helpers.get(i));
holder.put(helpers.get(i).getB(), tmp);
}
显示地图
{4=[1 4, 2 4, 3 4], 5=[1 5, 2 5], 6=[1 6]}
现在根据元素的大小
开始Map值的升序List mapValues = new ArrayList(holder.values());
Collections.sort(mapValues,new helperComparator());
System.out.println(mapValues);
和比较器
class helperComparator implements Comparator<List<helper>>{
@Override
public int compare(List<helper> o1, List<helper> o2) {
return o1.size() > o2.size() ? 1 : -1;
}
}
最终结果
[[1 6],[1 5,2 5],[1 4,2 4 3,4 4]
注意结果mapValues
是List<List<helpers>>
。我希望你能帮助他们。