我有以下格式的数据(都是双倍的)
Price1 Price2
1.2 5.1
3.2 4.2
1.4 1.4
1.3 1.1
我希望price1
和price2
相互关联。我需要按降序排序price2
,然后删除最后一条记录。然后我需要按降序排序price1
。
最佳方法是什么? - 哪种数据类型?我正在考虑使用hashmap但是没有位置的概念,虽然我可以做一些解决但是它会很混乱。也可以创建一个对象来存储它们,然后做一个类似的但是在想我是否可以在几行代码中做到这一点?不确定更好的选择是否可行而且好奇:)
答案 0 :(得分:0)
在Java8中,您可以这样做:
int[] prices1 = ...
int[] prices2 = ...
IntStream.range(0, prices1.length)
.map(i -> new Map.Entry<>(prices1[i], prices2[i]))
.sorted((entry1, entry2) -> {
return Integer.compare(entry1.getValue(), entry2.getValue())
})
.skip(1)
.sorted((entry1, entry2) -> {
return Integer.compare(entry1.getKey(), entry2.getKey())
})
...
答案 1 :(得分:0)
与@dasblinkenlight回答相似,
声明新的对象价格以保存值
class Prices {
BigDecimal price1;
BigDecimal price2;
public Prices(BigDecimal price1, BigDecimal price2) {
this.price1 = price1;
this.price2 = price2;
}
public BigDecimal getPrice1() {
return price1;
}
public void setPrice1(BigDecimal price1) {
this.price1 = price1;
}
public BigDecimal getPrice2() {
return price2;
}
public void setPrice2(BigDecimal price2) {
this.price2 = price2;
}
@Override
public String toString(){
return String.valueOf(price1).concat(" ").concat(String.valueOf(price2));
}
}
由于涉及价格,将变量声明为大十进制。你可以在SO中找到很多答案,为什么你应该使用BigDecimal而不是double。
根据您的要求,我认为您不需要根据price2对元素进行排序。 您的要求是删除最小的price2元素并按price1
排序class PriceComparator implements Comparator<Prices>{
@Override
public int compare(Prices o1, Prices o2) {
return o2.getPrice1().compareTo(o1.getPrice1());
}
public int getLeastPrice2(List<Prices> collections){
int i =0;
BigDecimal lowValue = collections.get(0).getPrice2();
for (int j = 1; j < collections.size(); j++) {
if (collections.get(j).getPrice2().compareTo(lowValue) < 0 ) {
lowValue = collections.get(j).getPrice2();
i = j;
}
}
return i;
}
}
比较器基于price1和其他方法来查找price2的最小位置
现在测试
List<Prices> priceList = new ArrayList<Prices>();
Prices p1 = new Prices(BigDecimal.valueOf(1.2), BigDecimal.valueOf(5.1));
Prices p2 = new Prices(BigDecimal.valueOf(3.2), BigDecimal.valueOf(4.2));
Prices p3 = new Prices(BigDecimal.valueOf(1.4), BigDecimal.valueOf(1.4));
Prices p4 = new Prices(BigDecimal.valueOf(1.3), BigDecimal.valueOf(1.1));
priceList.add(p1);
priceList.add(p2);
priceList.add(p3);
priceList.add(p4);
System.out.println(priceList);
PriceComparator priceComparator = new PriceComparator();
priceList.remove(priceComparator.getLeastPrice2(priceList));
System.out.println(priceList);
Collections.sort(priceList, priceComparator);
System.out.println(priceList);
out put
[1.2 5.1, 3.2 4.2, 1.4 1.4, 1.3 1.1]
[1.2 5.1, 3.2 4.2, 1.4 1.4]
[3.2 4.2, 1.4 1.4, 1.2 5.1]