java三元运算符 / Long型集合排序

2017-09-22  本文已影响0人  墨色尘埃

java三元运算符

int a = 10;  
int b = 20;
a==b?10:20; 结果为20

Long型集合排序
Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
有一个需求,需要对long型时间进行排序,但是使用了compareTo排序方法并不能正确打印顺序,比如下面的方法

/**
* 错误排序
*/
    public static void longPaiXu() {
        List<String> list = new ArrayList<String>();
        list.add(String.valueOf(1111111116));
        list.add(String.valueOf(1111111));
        list.add(String.valueOf(1111111119));
        list.add(String.valueOf(1111113));
        list.add(String.valueOf(11117));
        list.add(String.valueOf(11111114));
        list.add(String.valueOf(11112));
        list.add(String.valueOf(1111111111));
        list.add(String.valueOf(1111111118));

        Collections.sort(list,new MyComparator());
        Collections.sort(list);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i)+" ");
        }
    }
```
```
package com.hjh.zhyw;
import java.util.Comparator;
public class MyComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        // TODO Auto-generated method stub
        System.out.println(o1.compareTo(o2));
        return o1.compareTo(o2);
    }
}
```
后来网上搜索了一下,找到这个代码,大概是Date、String使用compareTo比较,Integer、Long、Double使用">"或者"<"比较
```
@Override  
        public int compare(Object o1, Object o2) {  
            int result = 0;  
            for (String file : filed) {  
                Object value1 = ReflexUtil.invokeMethod(file, o1);  
                Object value2 = ReflexUtil.invokeMethod(file, o2);  
                if (value1 == null || value2 == null) {  
                    continue;  
                }  
                if (value1 instanceof Integer) { //Integer整数序排序  
                    int v1 = Integer.valueOf(value1.toString());  
                    int v2 = Integer.valueOf(value2.toString());  
                    if (v1 == v2) continue;  
                    if (sort == 1) {  
                        return v1 - v2;  
                    } else if (sort == -1) {  
                        return v2 - v1;  
                    }  
                } else if (value1 instanceof Date) {  //Date类型排序  
                    Date d1 = (Date) value1;  
                    Date d2 = (Date) value2;  
                    if (d1.compareTo(d2) == 0) continue;  
                    if (sort == 1) {  
                        return d1.compareTo(d2);  
                    } else if (sort == -1) {  
                        return d2.compareTo(d1);  
                    }  
                } else if (value1 instanceof Long) { //Long排序  
                    long v1 = Long.valueOf(value1.toString());  
                    long v2 = Long.valueOf(value2.toString());  
                    if (v1 == v2) continue;  
                    if (sort == 1) {  
                        return v1 > v2 ? 1 : -1;  
                    } else if (sort == -1) {  
                        return v2 > v1 ? 1 : -1;  
                    }  
                } else if (value1 instanceof Double) { //Double排序  
                    Double v1 = Double.valueOf(value1.toString());  
                    Double v2 = Double.valueOf(value2.toString());  
                    if (v1 == v2) continue;  
                    if (sort == 1) {  
                        return v1 > v2 ? 1 : -1;  
                    } else if (sort == -1) {  
                        return v2 > v1 ? 1 : -1;  
                    }  
                }  
  
            }  
```
上一篇下一篇

猜你喜欢

热点阅读