鉴于一系列价格(如341.95),我如何才能找到最便宜的50个价格?
诀窍是阵列中的一些价格可以匹配,50的列表应该是唯一的价格。例如,如果123.45中有6个价格,我只想在我的最终清单50中有一个。不能有任何重复。
我认为最好的方法是将该数组吸入并插入第二个数组,过滤掉任何匹配的数字,但说起来容易做起来难。
答案 0 :(得分:2)
使用Java 8流:
int[] lowestPrices = Arrays.stream(prices)
.sorted()
.distinct()
.limit(50)
.toArray();
请注意,即使您使用“123.45”作为示例,我也使用了int[]
。使用浮点货币价值是一个糟糕的想法,因此代表123.45美元为12345美分。
答案 1 :(得分:1)
最佳就地解决方案
答案 2 :(得分:1)
以下是您问题的更加流行的解决方案
//priceArray is your input array
def firstFiftyPrices = priceArray.unique().sort().take(50)
答案 3 :(得分:0)
遍历数组,将每个项目添加到TreeSet
,然后返回前50个元素的列表。
答案 4 :(得分:0)
根据每个人的输入,我想出了它,它似乎工作。 minimumPrices是我的价格清单,谢谢大家!
Object[] st = lowestPrices.toArray();
for (Object s : st) {
if (lowestPrices.indexOf(s) != lowestPrices.lastIndexOf(s)) {
lowestPrices.remove(lowestPrices.lastIndexOf(s));
}
}
System.out.println("Distinct List " + lowestPrices)
答案 5 :(得分:0)
如果你有一个Double对象数组,你可以使用Groovy JDK's toUnique
, sort
, and take
methods找到最低的50个价格。
// generate some random prices
def r = new Random()
Double[] allPrices = (0..100).collect { (r.nextDouble() * 100).trunc(2) }
Double[] lowestPrices = allPrices.toUnique().sort().take(50)
向@cfrick提示,建议使用take
而不是范围和Math.min语法。