使用比较器对列表进行排序不起作用

时间:2017-07-12 02:43:33

标签: java sorting comparator

我想根据轴类型计数对产品数据列表进行排序。我无法在下面的代码中找到问题。我该如何对这个结果进行排序?

private void sortResults(List<ProductData> results) {
        Collections.sort(results, new Comparator<ProductData>() {
            @Override
            public int compare(ProductData product1, ProductData product2) {
                return product1.getAxisTypeCount().compareTo(product2.getAxisTypeCount());
            }
        });}


ProductSearchPageData<SearchStateData, ProductData> searchPageData = null;
            searchPageData = encodeSearchPageData(productSearchFacade.textSearch(searchState, pageableData));
sortResults(searchPageData.getResults());

预期结果:Makeup 37 , Watches 7 , jewelry 6 , skincare 6, Fragrance 4

实际结果:Makeup 37 , Fragrance 4 , jewelry 6 , skincare 6,Watches 7

1 个答案:

答案 0 :(得分:0)

private void sortResults(List<ProductData> results) {
    Collections.sort(results, new Comparator<ProductData>() {
        @Override
        public int compare(ProductData product1, ProductData product2) {
            return product1.getAxisTypeCount().compareTo(product2.getAxisTypeCount());
        }
    });}

product1将从列表中获取第二个值,而product2将从列表中获取第一个值。 例如:

您的列表是[Watches , jewelry, Fragrance, .........] 在调用比较函数product1 = jewelryproduct2 = Watches

我假设getAxisTypeCount()给出整数值,如果你的对象是&#34;化妆37&#34;,getAxisTypeCount()将返回37

此行=&gt;

return product1.getAxisTypeCount().compareTo(product2.getAxisTypeCount());

会导致:

Fragrance   4
jewelry   6
skincare   6
Watches   7
Makeup   37

与实际结果Makeup 37 , Fragrance 4 , jewelry 6 , skincare 6, Watches 7

中提到的不一样

如果您希望比较方法产生输出,如您在预期结果中提到的那样:Makeup 37 , Watches 7 , jewelry 6 , skincare 6, Fragrance 4

此行return product2.getAxisTypeCount().compareTo(product1.getAxisTypeCount())将解决您的问题。

private void sortResults(List<ProductData> results) {
    Collections.sort(results, new Comparator<ProductData>() {
        @Override
        public int compare(ProductData product1, ProductData product2) {
            return product2.getAxisTypeCount().compareTo(product1.getAxisTypeCount());
        }
    });}