`
weina
  • 浏览: 144174 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

关于Comparator 按指定的顺序 排序

    博客分类:
  • java
 
阅读更多

package com.weina.utils;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

import com.weina.PymkItemVO;

public class PymkItemTypeComparator implements Comparator<PymkItemVO> {
    private int[] TYPE_ORDER = {1,16,8,2,4}; //按照指定的这个排序
   
    public PymkItemTypeComparator() {
    }

    /**
     * 是否倒序
     * @param desc
     */
    public PymkItemTypeComparator(boolean desc) {
        if (desc) {
            int[] temp = new int[TYPE_ORDER.length];
            for (int i=0; i<TYPE_ORDER.length; i++) {
                temp[i] = TYPE_ORDER[TYPE_ORDER.length - i - 1];
            }
            TYPE_ORDER = temp;
        }
    }

    @Override
    public int compare(PymkItemVO o1, PymkItemVO o2) {
        for (int type : TYPE_ORDER) {
            int type1 = o1.getType() & type;
            int type2 = o2.getType() & type;
            System.out.println("type="+type+";type1="+type1+";type2="+type2);
            if (type1 != type2) {
                return type2 - type1;
            }
        }
       
        return 0;
    }
   
    public static void main(String[] args) {
        List<PymkItemVO> pymkList = new LinkedList<PymkItemVO>();
        PymkItemVO item = new PymkItemVO();
        item.setStatus("n");
        item.setType(4);
        item.setUserId(11);
        pymkList.add(item);
       
        item = new PymkItemVO();
        item.setStatus("n");
        item.setType(2);
        item.setUserId(22);
        pymkList.add(item);
       
        item = new PymkItemVO();
        item.setStatus("n");
        item.setType(16);
        item.setUserId(33);
        pymkList.add(item);
       
        item = new PymkItemVO();
        item.setStatus("n");
        item.setType(1);
        item.setUserId(44);
        pymkList.add(item);
       
        item = new PymkItemVO();
        item.setStatus("n");
        item.setType(8);
        item.setUserId(55);
        pymkList.add(item);

        System.out.println(pymkList);
       
        Collections.sort(pymkList, new PymkItemTypeComparator());
       
        System.out.println(pymkList);
       
        Collections.sort(pymkList, new PymkItemTypeComparator(true));

        System.out.println(pymkList);
       
       
        System.out.println("=================");
        int a = 8;
        int[] TYPE_ORDER = {1,8,2,4};
        for (int type : TYPE_ORDER) {
            System.out.print(a & type);
            System.out.print(" ");
        }
        System.out.println("=================");
    }

}

分享到:
评论

相关推荐

    Android文件排序

    这里,`compare()`方法根据文件名的自然顺序(字母顺序)进行比较,如果需要自定义排序规则,比如按文件大小或最后修改时间排序,可以在`compare()`方法中调整逻辑。 此外,为了提高用户体验,可以考虑添加其他排序...

    按字母排序的ListView

    这可以通过Java的Collections.sort()方法实现,需要提供一个比较器(Comparator)来定义排序规则。比较器应比较两个条目的首字母,例如按照字符的Unicode值进行比较。 接下来,我们添加快速定位功能。通常会有一个...

    Comparable&Comparator区别

    如果`o1`在指定的排序顺序中位于`o2`之前,则返回负数;如果两个对象在排序中的位置相同,则返回0;如果`o1`位于`o2`之后,则返回正数。 - `boolean equals(Object obj)`: 此方法用于判断比较器是否等于另一个对象。...

    对Map按key和value分别排序

    这时,我们可以借助于 Collections 的 sort(List&lt;T&gt; list, Comparator&lt;? super T&gt; c) 方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是,需要注意的是,所有的元素都必须能够根据所提供的比较器来进行...

    java List中对象多属性排序及各属性排序设置

    这段代码将按照姓名的自然顺序(即字母顺序)进行排序,然后在姓名相同的情况下,按工资的降序排列。 总结来说,Java中的List可以通过自定义Comparator或者利用泛型和方法引用来实现对象多属性的动态排序。这种技术...

    java8新特性将List中按指定属性排序过滤重复数据的方法

    Java 8 新特性将 List 中按指定属性排序过滤重复数据的方法 Java 8 新特性将 List 中按指定属性排序过滤重复数据的方法是 Java 8 中一个非常有用的功能,它可以帮助开发者快速地对 List 中的数据进行排序和过滤,以...

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

    同样,如果需要按多个属性排序,也需提供自定义`Comparator`。 在某些情况下,Java 8的lambda表达式可以使代码更简洁: ```java Arrays.sort(people, (p1, p2) -&gt; { int lastNameCompare = p1.getLastName()....

    Comparator

    `Comparator`接口是Java标准库中的一个关键工具,用于定义自定义的比较规则,从而实现对象的排序。在这个场景中,我们关注的是`org.apache.commons.beanutils.BeanComparator`,这是一个由Apache Commons BeanUtils...

    java中list排序

    这时需要使用Comparator接口来实现排序。 Comparator 接口是 Java 中的一个接口,它提供了 compare 方法,用于比较两个对象的大小。使用 Comparator 接口可以实现对对象的排序。 在上面的代码中,我们可以看到使用...

    java中文排序,数字字母汉字排序

    这将会把`list`按照"123", "abc", "def", "汉字", "汉字2"的顺序排序。 在你的压缩包文件`pinyinSort`中,可能包含了一些示例代码或者测试用例,用于演示如何使用这样的排序算法。通过阅读和运行这些代码,你可以更...

    SortNames:CSC 499项目-按照名称的长短先后排序,然后按字母顺序排序(也可以按相反顺序排序)

    如果需要进一步按照字母顺序排序,可以在长度比较相等的情况下,使用`compareTo()`: ```java if (lengthCompare == 0) { return s1.compareTo(s2); } ``` 对于反向排序,我们可以在比较时改变比较结果的符号: ...

    Comparable与Comparator的区别Java开

    如果你有一个类,其实例没有自然顺序或者需要根据不同的标准进行排序,可以使用`Comparator`。`Comparator`接口可以为任何类型的对象提供排序规则,即使这些对象的类没有实现`Comparable`接口。 `compare()`方法的...

    排序比较器的使用

    此外,`Comparator`还可以用于`TreeSet`和`TreeMap`等数据结构,它们在构造时或插入元素时可以接收一个`Comparator`,以保证插入的数据按照指定的顺序排列。 总之,`Comparator`在Android开发中扮演着至关重要的...

    关于中文英文混合排序javaDemo

    在实际开发中,如果涉及到大量数据的排序,还可以考虑使用`Comparator`接口,配合`Collections.sort()`方法,实现更复杂的排序逻辑。例如,你可能需要在保持英文字符顺序的同时,让中文字符按照中文拼音的顺序排列。...

    java 对象 排序

    同样,如果数组元素实现了`Comparable`,则按自然顺序排序。对于自定义排序,可以传递一个`Comparator`。 - **自定义Comparator示例**: ```java class Person { String name; int age; // constructor, ...

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    `TreeMap`内部使用红黑树数据结构,可以保证插入的元素按照指定的比较器(默认是自然顺序,即ASCII码顺序)自动排序。在本例中,我们创建了一个新的`TreeMap`实例,将原始`map`的键值对复制到其中,这样新`Map`的键...

    arraylist 对象 数组排序

    然而,当ArrayList中存储的是自定义对象,且这些对象没有实现Comparable接口时,我们就需要提供一个Comparator来指定排序规则。Comparator是一个接口,定义了compare()方法,用于比较两个对象并返回一个整数。我们...

    Java 对象排序详解.rar_java 对象排序_对象_排序

    当我们向TreeSet添加元素时,它们会自动按照指定的顺序排序。如果元素是Comparable的,那么它们会根据自然顺序排序;否则,我们需要提供一个Comparator。 ```java TreeSet&lt;MyObject&gt; treeSet = new TreeSet...

    Android sort按时间排序

    当数据涉及到时间属性时,我们经常需要对其进行排序,以便用户能按照时间顺序查看。本篇将详细讲解如何使用`ListView`显示按时间排序的数据,并通过`Adapter`和`Collections.sort`方法处理Map中的数据。 首先,我们...

Global site tag (gtag.js) - Google Analytics