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("=================");
}
}
分享到:
相关推荐
这里,`compare()`方法根据文件名的自然顺序(字母顺序)进行比较,如果需要自定义排序规则,比如按文件大小或最后修改时间排序,可以在`compare()`方法中调整逻辑。 此外,为了提高用户体验,可以考虑添加其他排序...
这里,`Comparator.naturalOrder()`是根据日期的自然顺序进行排序,即按年、月、日依次比较。如果需要自定义排序规则,可以创建一个`Comparator<LocalDate>`实例。 4. 自定义日期排序: 如果需要按照特定规则...
这可以通过Java的Collections.sort()方法实现,需要提供一个比较器(Comparator)来定义排序规则。比较器应比较两个条目的首字母,例如按照字符的Unicode值进行比较。 接下来,我们添加快速定位功能。通常会有一个...
如果`o1`在指定的排序顺序中位于`o2`之前,则返回负数;如果两个对象在排序中的位置相同,则返回0;如果`o1`位于`o2`之后,则返回正数。 - `boolean equals(Object obj)`: 此方法用于判断比较器是否等于另一个对象。...
这时,我们可以借助于 Collections 的 sort(List<T> list, Comparator<? super T> c) 方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是,需要注意的是,所有的元素都必须能够根据所提供的比较器来进行...
这段代码将按照姓名的自然顺序(即字母顺序)进行排序,然后在姓名相同的情况下,按工资的降序排列。 总结来说,Java中的List可以通过自定义Comparator或者利用泛型和方法引用来实现对象多属性的动态排序。这种技术...
Java 8 新特性将 List 中按指定属性排序过滤重复数据的方法 Java 8 新特性将 List 中按指定属性排序过滤重复数据的方法是 Java 8 中一个非常有用的功能,它可以帮助开发者快速地对 List 中的数据进行排序和过滤,以...
`Comparator`接口是Java标准库中的一个关键工具,用于定义自定义的比较规则,从而实现对象的排序。在这个场景中,我们关注的是`org.apache.commons.beanutils.BeanComparator`,这是一个由Apache Commons BeanUtils...
同样,如果需要按多个属性排序,也需提供自定义`Comparator`。 在某些情况下,Java 8的lambda表达式可以使代码更简洁: ```java Arrays.sort(people, (p1, p2) -> { int lastNameCompare = p1.getLastName()....
这时需要使用Comparator接口来实现排序。 Comparator 接口是 Java 中的一个接口,它提供了 compare 方法,用于比较两个对象的大小。使用 Comparator 接口可以实现对对象的排序。 在上面的代码中,我们可以看到使用...
这将会把`list`按照"123", "abc", "def", "汉字", "汉字2"的顺序排序。 在你的压缩包文件`pinyinSort`中,可能包含了一些示例代码或者测试用例,用于演示如何使用这样的排序算法。通过阅读和运行这些代码,你可以更...
如果需要进一步按照字母顺序排序,可以在长度比较相等的情况下,使用`compareTo()`: ```java if (lengthCompare == 0) { return s1.compareTo(s2); } ``` 对于反向排序,我们可以在比较时改变比较结果的符号: ...
如果你有一个类,其实例没有自然顺序或者需要根据不同的标准进行排序,可以使用`Comparator`。`Comparator`接口可以为任何类型的对象提供排序规则,即使这些对象的类没有实现`Comparable`接口。 `compare()`方法的...
在实际开发中,如果涉及到大量数据的排序,还可以考虑使用`Comparator`接口,配合`Collections.sort()`方法,实现更复杂的排序逻辑。例如,你可能需要在保持英文字符顺序的同时,让中文字符按照中文拼音的顺序排列。...
`TreeMap`内部使用红黑树数据结构,可以保证插入的元素按照指定的比较器(默认是自然顺序,即ASCII码顺序)自动排序。在本例中,我们创建了一个新的`TreeMap`实例,将原始`map`的键值对复制到其中,这样新`Map`的键...
此外,`Comparator`还可以用于`TreeSet`和`TreeMap`等数据结构,它们在构造时或插入元素时可以接收一个`Comparator`,以保证插入的数据按照指定的顺序排列。 总之,`Comparator`在Android开发中扮演着至关重要的...
同样,如果数组元素实现了`Comparable`,则按自然顺序排序。对于自定义排序,可以传递一个`Comparator`。 - **自定义Comparator示例**: ```java class Person { String name; int age; // constructor, ...
然而,当ArrayList中存储的是自定义对象,且这些对象没有实现Comparable接口时,我们就需要提供一个Comparator来指定排序规则。Comparator是一个接口,定义了compare()方法,用于比较两个对象并返回一个整数。我们...
当我们向TreeSet添加元素时,它们会自动按照指定的顺序排序。如果元素是Comparable的,那么它们会根据自然顺序排序;否则,我们需要提供一个Comparator。 ```java TreeSet<MyObject> treeSet = new TreeSet...
当数据涉及到时间属性时,我们经常需要对其进行排序,以便用户能按照时间顺序查看。本篇将详细讲解如何使用`ListView`显示按时间排序的数据,并通过`Adapter`和`Collections.sort`方法处理Map中的数据。 首先,我们...