【问题标题】:How to sort a list of BigDecimal objects如何对 BigDecimal 对象列表进行排序
【发布时间】:2015-06-20 20:55:02
【问题描述】:

给定以下输入:

-100
50
0
56.6
90

我已将每个值作为 BigDecimal 添加到列表中。

我希望能够将列表从最高值到最低值排序。

我尝试通过以下方式做到这一点:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        List<BigDecimal> list = new ArrayList<BigDecimal>();

        while(sc.hasNext()){
            list.add(new BigDecimal(sc.next()));
        }

        Collections.reverse(list);

        for(BigDecimal d : list){

            System.out.println(d);
        }
    }

哪些输出:

90
56.6
0
50
-100

在这种情况下,50 应该是大于 0 的值。

在考虑十进制和非十进制值的情况下,如何正确地将 BigDecimal 列表从高到低排序?

【问题讨论】:

  • Collections.reverse 只是反转列表。使用Collections.sort(list, Comparator.reverseOrder());
  • 我想你想要sort,而不是reverse...

标签: java list sorting bigdecimal


【解决方案1】:

在您的代码中,您只是调用 reverse 来反转列表的顺序。您还需要在reversed order 中对列表进行排序。

这样就可以了:

Collections.sort(list, Collections.reverseOrder());

【讨论】:

  • 但是reverseOrder 从 1.5 开始就已经存在了。
  • 你说得对,我只是查看了 Comparator.reverseOrder() API。感谢您的更新!
  • 专业提示:如果您意识到自己的答案不如预期的那么好,请尝试更新它以使其成为可能。对于 3 行答案,无需在编辑前添加“编辑:...”。
【解决方案2】:

您可以使用org.apache.commons.collections.list.TreeList。无需排序。它将按排序顺序保持插入的对象。然后,您可以根据需要将其反转。

【讨论】:

  • 你确定吗?尽管名称与 JDK 的 TreeMap 相似,但 javadocs 似乎表明 TreeList 的工作方式与任何其他 List 一样:它使元素按照您添加/插入的方式进行排序。它只是在内部使用不同的实现来保留这些元素。
【解决方案3】:

你可以试试这个,它对我有用:

package HackerRank;

import java.util.*;
import java.math.*;

class Sorting
{
    public static void main(String []args)
    {
        Scanner sc = new Scanner(System.in);
        TreeSet<BigDecimal> list = new TreeSet<BigDecimal>();
        int testCase = sc.nextInt();

        while(testCase-- > 0)
            list.add(new BigDecimal(sc.next()));

        System.out.println(list); //ascending order
        System.out.println(list.descendingSet()); //descending order
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2020-02-23
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多