根据计算值

时间:2017-03-18 21:45:57

标签: java arrays sorting arraylist

对于最近的java编码测试,我有一个类似于以下的问题:

函数接收一串逗号分隔值。 添加包含的每个数字的数字,以便为该数字创建单个值。 按升序排序 按此排序顺序返回原始值(即不是计算值)。

因此,如果字符串输入是:

{ “91,15,20”} 添加后的数字为: 10,6,2 从(9 + 1 == 10,1 + 5 == 6,2 + 0 == 2)

按升序排序后: -2,6,10-

我们将返回原始字符串,如上所示: 20,15,91

从编码角度来看,这意味着我们会将逗号上的字符串拆分为字符串数组

对于每个项目,将字符串转换为int,然后计算其“值”

现在,这就是我的狐狸!

首先,我将计算出的项目添加到数组列表中,然后对其进行排序,但意识到由于我需要返回原始字符串(而不是计算值),这样做并不好。

因此,我正在寻找未来知识的建议。

我实际上并不特别想要代码,但对方法的建议更多。

使用地图是最好的方法吗?我考虑过但看不出那是怎么回事,特别是如果字符串中可能存在重复值。 拥有两个阵列会更好吗? 我解析字符串数组时最好排序吗?

虽然我已经失败了这个问题,但我仍想完成它,以便我知道......毕竟我需要从失败中吸取教训。

请以最好的方法提出建议。

1 个答案:

答案 0 :(得分:0)

这是一些建议。我假设你使用的是Java 8。

如果您不关心性能,为什么不在计算后丢弃它们,而不是将您的值放在数据结构中,如果您不关心性能?

从JDK 1.8开始,sort上的ArrayList方法接受比较器。 Comparator<Integer>有这种方法:

public int compare(Integer o1, Integer o2) {

}

如果你只是用这样的方法填写这个方法......

public int compare(Integer o1, Integer o2) {
    Integer a = // add up the digits in o1
    Integer b = // add up the digits in o2
    return a.compareTo(b);
}

排序会奏效!然后,您可以通过将其转换为lambda:

来美化您的代码
list.sort(
        (o1, o2) -> {
                Integer a = <calculation>;
                Integer b = <calculation>;
                return o1.compareTo(o2);
        }
);