`

Java 对象多字段排序 Comparator

    博客分类:
  • java
阅读更多

文章来源:http://www.itnose.net/detail/6036550.html
更多文章:http://www.itnose.net/type/1.html

Java 反射类:ReflexUtil

 

public class ReflexUtil {
    static Logger logger = LoggerFactory.getLogger(ReflexUtil.class);

    //getMethod
    static public Object invokeMethod(String propertiesName, Object object) {
        try {
            if(object==null) return null;
            if (!propertiesName.contains(".")) {
                String methodName = "get"+getMethodName(propertiesName);
                Method method = object.getClass().getMethod(methodName);
                return method.invoke(object);
            }
            String methodName = "get"+getMethodName(propertiesName.substring(0,propertiesName.indexOf(".")));
            Method method = object.getClass().getMethod(methodName);
            return invokeMethod(propertiesName.substring(propertiesName.indexOf(".")+1), method.invoke(object));

        } catch (Exception e) {
            logger.error(e.toString(), e);
            return null;
        }
    }

    private static String getMethodName(String fildeName) {
        byte[] items = fildeName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }

    public static void main(String args[]) {
        Video video = new Video();
        Album album = new Album();
        album.setAlbumId(346l);
        video.setAlbum(album);
        video.setVideoId(126l);
        System.out.println(ReflexUtil.invokeMethod("album.albumId", video));
    }
}

 

 

Java 对象排序 : CompareUtil

 

 

public class CompareUtil {

    //sort 1正序 -1 倒序  filed 多字段排序
    public static <T> Comparator createComparator(int sort, String... filed) {
        return new ImComparator(sort, filed);
    }

    public static class ImComparator implements Comparator {
        int sort = 1;
        String[] filed;

        public ImComparator(int sort, String... filed) {
            this.sort = sort == -1 ? -1 : 1;
            this.filed = filed;
        }

        @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) || !(value1 instanceof Integer)) {
                    continue;
                }
                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 {
                    continue;
                }
            }
            return result;
        }
    }

    public static void main(String args[]) {
        LabelAlbum label1 = new LabelAlbum();
        label1.setLabelId(1); label1.setSequnces(1);
        LabelAlbum label2 = new LabelAlbum();
        label2.setLabelId(1);label2.setSequnces(2);
        LabelAlbum label3 = new LabelAlbum();
        label3.setLabelId(3); label3.setSequnces(4);
        LabelAlbum label4 = new LabelAlbum();
        label4.setLabelId(3);label4.setSequnces(3);
        LabelAlbum label5 = new LabelAlbum();
        label5.setLabelId(4);label5.setSequnces(2);
        List<LabelAlbum> list = new ArrayList<LabelAlbum>();
        list.add(label1);
        list.add(label2);
        list.add(label3);
        list.add(label4);
        list.add(label5);
        Collections.sort(list, CompareUtil.createComparator(1, "labelId","sequnces"));
        for (int i = 0; i < list.size(); i++) {
            LabelAlbum labelAlbum=list.get(i);
            System.out.println("labelId:"+labelAlbum.getLabelId()+"  sequence:"+labelAlbum.getSequnces());
        }
    }
}
对象,排序,comparator,java,字段0

 

 

分享到:
评论

相关推荐

    java排序Comparator和Comparable

    例如,你可以先按一个字段排序,再按另一个字段排序: ```java list.sort(Comparator.comparing(MyObject::getField1).thenComparing(MyObject::getField2)); ``` 在实际开发中,`Comparable`常用于定义类的自然...

    java集合某个字段按照中文拼音排序.docx

    "Java集合某个字段按照中文拼音排序" Java集合某个字段按照中文拼音排序是Java开发中经常遇到的问题。对Java集合中的某个字段按照中文拼音排序可以使用多种方法,本文将介绍两种常见的方法。 方法一:使用...

    java 大文件 多字段排序

    - 在Java中,可以使用`Comparator`接口来实现多字段排序。创建一个比较器,它根据多个字段顺序进行比较。例如,如果要按名字、年龄和性别排序,可以先按名字排序,如果名字相同则按年龄排序,如果年龄也相同则按...

    JAVA 对象数组按照多个属性进行排序

    在Java编程中,对象数组排序是一项常见的任务,...以上就是关于“JAVA 对象数组按照多个属性进行排序”的详细解析,希望对你理解Java排序机制有所帮助。在实际开发中,灵活运用这些技巧可以提高代码的可维护性和效率。

    Java中的Comparator 对多个排序条件的处理

    在Java编程中,`Comparator`接口是用于比较对象的关键工具,尤其在进行自定义排序时。这个接口提供了`compare()`方法,根据特定的规则来决定两个对象的相对顺序。当需要根据多个排序条件对集合进行排序时,可以使用...

    Java对象排序中文排序SortedSet排序使用和源码讲

    要实现Java对象的排序,我们需要让这些对象的类实现Comparable接口或者提供Comparator。对于中文排序,我们主要关注的是字符串的比较,因为中文字符的排序规则不同于英文。在Java中,字符串的比较默认基于Unicode...

    详解JAVA使用Comparator接口实现自定义排序

    在实际开发中,使用Comparator接口可以解决许多排序问题,例如按照复杂的业务规则排序、按照多个字段排序等等。 Comparator接口提供了很高的灵活性和可扩展性,满足了我们对对象排序的需求。 JAVA使用Comparator...

    java中list排序

    Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高系统的性能。这样...

    java汉字排序

    1.import java.util.Comparator; 2.import net.sourceforge.pinyin4j.PinyinHelper; 3./** 4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class ...

    Java实体类中Set按照对象的某个字段对set排序

    Java实体类中Set按照对象的某个字段对set排序 Java实体类中Set按照对象的某个字段对set排序是Java开发中的一种常见需求,特别是在实体类中使用Set集合存储数据时。这种需求主要是为了在查询出实体类对象时,可以...

    java的Comparator和Comparable.docx

    在 Java 中,Comparator 和 Comparable 是两个非常重要的接口,它们用于对象的排序操作。这两个接口都是在 java.util 包中定义的,主要用于定制排序规则。 **一、Comparator 接口** Comparator 接口允许我们创建...

    最快的排序算法 java最快的排序-在Java中对列表进行排序的最快方法,排序算法数据结构

    例如,在上述代码中,可以根据 serverDataRate 字段对 ServerInfo 对象列表进行排序。 在 Java 中,还有其他的排序算法,如堆排序、Radix 排序等,每种排序算法都有其优缺点,选择合适的排序算法取决于具体的应用...

    java中Collections.sort排序详解

    本文详细介绍了Java中的Collections.sort排序机制,包括Comparator接口的使用和实现机制。通过示例代码,展示了如何使用Collections.sort()方法对列表进行排序,并定义了一个Comparator接口的实现类来比较书籍的价格...

    java List排序demo

    这就是如何在Java中对`List`进行排序的完整过程,特别是当列表包含自定义对象并需要根据特定字段排序时。通过`Collections.sort()`和`Comparator`,我们可以灵活地调整排序规则,满足各种业务需求。 在`RankingDemo...

    List对象去重和按照某个字段排序的实现方法

    List对象去重和按照某个字段排序的实现方法 在Java开发中,List对象的去重和排序是非常常见的操作。今天,我们将探讨如何对List对象进行去重和按照某个字段排序的实现方法。 首先,让我们来看一下List对象的去重。...

    多个对象列表排序

    这个过程称为多条件排序或多字段排序。本文将深入探讨如何在Java和Android环境中实现这个功能。 首先,让我们理解基础的排序方法。在Java中,`List`接口提供了`sort(Comparator&lt;? super E&gt; comparator)`方法,允许...

    Java按照List内存储的对象的某个字段进行排序的实例

    在Java编程中,有时我们需要对List集合中的对象根据它们的某个特定字段进行排序。这个过程可以通过实现Comparable接口或Comparator接口来实现。以下是一个详细的实例,展示了如何按照List中存储的对象的某个字段(在...

    Java中实现Comparable和Comparator对象比较

    同时,Comparator也可以用于实现复杂比较逻辑,比如多个字段的复合排序。 对于日期的排序,我们可以创建一个DateComparator类,实现Comparator接口,并在compare方法中比较两个日期对象: ```java class ...

    Android List(集合)中的对象以某一个字段排序案例

    Android List(集合)中的对象以某一个字段排序案例 ...Android List(集合)中的对象以某一个字段排序案例是非常重要的一部分,在实际开发中,我们需要根据实际情况选择合适的排序规则,使用Comparator接口来实现排序。

    Java对List对象进行排序_.docx

    总之,Java提供了多种对List对象进行排序的方式,包括使用`Collections.sort()`、自定义Comparator以及Java 8的新特性。选择哪种方法取决于具体需求,如性能、代码可读性和复杂性等因素。在保证代码安全的同时,应尽...

Global site tag (gtag.js) - Google Analytics