是否有一种简单快捷的方法可以在Java中对ArrayList中的元素进行分组? 我问是否已经有一种方法没有实现我的自我?
之类的东西Collections.sort(monuments,new objectComparator());
修改 我有一个对象列表,其中有一个名为category的字段,此列表将显示给用户。我希望首先显示category_type == 1的对象,依此类推。
我无法通过比较器实现这一点,因为比较器的工作方式如下:
如果第一个值更大,则返回int a> 0 return int a
答案 0 :(得分:3)
实际上这可以用比较器来实现:
public int compareTo(Monument o) {
Integer otherCategory = o.getCategoryType();
Integer thisCategory = this.getCategoryType();
return thisCategory.compareTo(otherCategory);
}
如果比较器相同则返回0,如果thisCategory
小于otherCategory
则返回-1,如果thisCategory
大于otherCategory
则返回1
这是基于这个想法的单元测试:
public class SortTest {
@Test
public void test() {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(1);
System.out.println("Unsorted: " + list);
Collections.sort(list);
System.out.println("Sorted: " + list);
}
}
输出:
Unsorted: [1, 2, 3, 4, 1]
Sorted: [1, 1, 2, 3, 4]
答案 1 :(得分:1)
尝试使用Map<X, List<CustomObject>>
进行分组,其中X是分组(在您的情况下是表示category_type的整数)
例如:
public Map<Integer, List<CustomObject>> groupByCategoryType(List<CustomObject> list) {
Map<Integer, List<CustomObject>> map = new TreeMap<Integer, List<CustomObject>>();
for (CustomObject o : list) {
List<CustomObject> group = map.get(o.getCategoryType());
if (group == null) {
group = new ArrayList();
map.put(o.getCategoryType(), group);
}
group.add(o);
}
return map;
}