• 【Java】对ArrayList排序


    java如何对ArrayList中对象按照该对象某属性排序

    (从小到大)

    两种方法:

    方法一:
    Comparator<KNNNode> comparator = new Comparator<KNNNode>() { @Override public int compare(KNNNode o1, KNNNode o2) { System.out.println("进入 compare function"); // TODO Auto-generated method stub if (o1.getDistance() <= o2.getDistance()) {//o1属性小于等于o2属性时,返回1 return 1; } else { return -1; } } };

    调用方法:

    List<KNNNode> nodelist = new ArrayList<KNNNode>();
    //此处需要填充nodelist.add();
    Collections.sort(nodelist, comparator);// 调用
    
    方法二:
    class SortBy implements Comparator { public int compare(Object obj1, Object obj2) { KNNNode point1 = (KNNNode) obj1; KNNNode point2 = (KNNNode) obj2; if (point1.getDistance() <= point2.getDistance()) { return 1; } else { return 0; } } }

    调用方法:

    Collections.sort(nodelist, new SortBy());
    

    KNNNode结点内的属性:

    package newKNN;
    
    /**
     * KNN结点类,用来存储最近邻的k个元组相关的信息
     */
    public class KNNNode {
    	private int index; // 元组标号
    	private double distance; // 与测试元组的距离
    	private String seq;//滑动窗口motif序列片段
    	
    	public KNNNode(int index, double distance, String seq) {
    		super();
    		this.index = index;
    		this.distance = distance;
    		this.seq = seq;
    		
    	}
    	public int getIndex() {
    		return index;
    	}
    	public void setIndex(int index) {
    		this.index = index;
    	}
    	public double getDistance() {
    		return distance;
    	}
    	public void setDistance(double distance) {
    		this.distance = distance;
    	}
    	public String getSeq() {
    		return seq;
    	}
    	public void setSeq(String seq) {
    		this.seq = seq;
    	}
    	
    }
    

     我想要按照KNNNode的distance属性排序。

    若要按照从大到小的顺序排序,如果只是将

    >=返回值改为-1

    <返回值改为1 会出现异常。

    Comparison method violates its general contract!

     原因是是实现接口Comparator 的类有问题在compare中没有处理好两个比较的对象相等的情况

    public int compare(KNNNode o1, KNNNode o2);
    
    即 o1.getDistance() == o2.getDistance() 时,返回值不是0

    我最终的实现代码是:(从大到小排序)

    Comparator<KNNNode> comparator = new Comparator<KNNNode>() {
    
    		@Override
    		public int compare(KNNNode o1, KNNNode o2) {
    			// TODO Auto-generated method stub
    			if (o1.getDistance() < o2.getDistance()) {
    				return 1;
    			} else if(o1.getDistance() > o2.getDistance()){
    				return -1;
    			}else{
    				return 0;
    			}
    		}
    
    	};
    

    参考列表:

    http://blog.csdn.net/telenewbie/article/details/45061089

    http://www.cnblogs.com/xujian2014/p/5215082.html

    http://www.cnblogs.com/fzzl/archive/2010/08/14/1799408.html

  • 相关阅读:
    build-your-own-react 注释版
    react hooks 理念之代数效应
    用Robot Framework+python来测试基于socket通讯的C/S系统(网络游戏)
    使用svndumpfilter exclude来清理svn库的废弃文件实现差别备份
    使用SonarQube+Eclipse来分析python代码
    是该写点什么了
    EventLoop
    Promise 学习
    ES6 模块化导入导出
    Vue实现对象列表根据某一字段排序
  • 原文地址:https://www.cnblogs.com/yumiaomiao/p/7717676.html
Copyright © 2020-2023  润新知