对于最近的java编码测试,我有一个类似于以下的问题:
函数接收一串逗号分隔值。 添加包含的每个数字的数字,以便为该数字创建单个值。 按升序排序 按此排序顺序返回原始值(即不是计算值)。
因此,如果字符串输入是:
{ “91,15,20”} 添加后的数字为: 10,6,2 从(9 + 1 == 10,1 + 5 == 6,2 + 0 == 2)
按升序排序后: -2,6,10-
我们将返回原始字符串,如上所示: 20,15,91
从编码角度来看,这意味着我们会将逗号上的字符串拆分为字符串数组
对于每个项目,将字符串转换为int,然后计算其“值”
现在,这就是我的狐狸!
首先,我将计算出的项目添加到数组列表中,然后对其进行排序,但意识到由于我需要返回原始字符串(而不是计算值),这样做并不好。
因此,我正在寻找未来知识的建议。
我实际上并不特别想要代码,但对方法的建议更多。
使用地图是最好的方法吗?我考虑过但看不出那是怎么回事,特别是如果字符串中可能存在重复值。 拥有两个阵列会更好吗? 我解析字符串数组时最好排序吗?
虽然我已经失败了这个问题,但我仍想完成它,以便我知道......毕竟我需要从失败中吸取教训。
请以最好的方法提出建议。
答案 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);
}
);