根据名称对ArrayLists进行分组和排序

时间:2016-05-08 01:39:58

标签: java list arraylist collections grouping

陷入了以下问题。我从数据库中填充了一个ArrayList,如下所示。但发现我需要根据名称对列表进行分组(如果第一个列表中的其他两个值与第二个列表匹配)。分组后,我需要按升序对名称进行排序。我无法找到解决方案。我应该如何迭代它,对名称进行分组和排序?

VerDetail(0)

日期: 2016年8月3日 类型:收入 姓名:汤姆

VerDetail(1)

2016年8月3日 SSN 汤姆

VerDetail(2)

2016年8月3日 收入 本

VerDetail(3)

2016年8月3日 SSN 本

VerDetail(4)

2016年8月3日 收入 千斤顶

VerDetail(5)

2016年8月3日 SSN 千斤顶

我希望我的列表按名称分组,如下所示

VerDetail(0)

2016年8月3日 收入 本 插口 汤姆

VerDetail(1)

2016年8月3日 SSN 本 插口 汤姆

1 个答案:

答案 0 :(得分:0)

通过使用集合的sort()方法,您可以通过分组对其进行排序。

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]

资源链接: How to group elements in ArrayList<CustomObject>

在Java 8中

使用Collectors类和流,您可以这样做:

Map<String, List<Person>> mapByName = allPeople.stream()
                                               .collect(Collectors.groupingBy(Person::getName));

资源链接:Group by field name in Java