我有一个国家代码值列表(可以重复)和相应的价格,如主类中所示,我想以这种方式找到最大值/最小值:
如果 Country Code = 0.1 ,我应该从 0.90、0.91、0.92 中得到最高价格 = 0.92。对于所有其他国家/地区代码,依此类推,即我想为每个不同的国家/地区代码查找最高价格
我已经在下面显示的代码中成功完成了它。但这是非常缓慢且不是好方法。
我的方法:由于“Class Main”中的数据是相关的(国家代码,价格),我首先使用带 Comparator 的“Telephone”类按国家代码对数据进行排序,然后扫描“Telephone-ArrayList”的所有元素“然后我通过比较 ArrayList 元素找到每个“不同”国家代码的最大值。
class Telephone implements Comparator<Telephone>{
private int countryCode;
private double price;
Telephone(){
}
Telephone( int c, double p){
countryCode= c;
price= p;
}
public int getCountryCode(){
return countryCode;
}
public double getPrice(){
return price;
}
// Overriding the compare method to sort
public int compare(Telephone d, Telephone d1){
return d.getCountryCode() - d1.getCountryCode();
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// Takes a list o Telephone objects
ArrayList <Telephone> list = new ArrayList<Telephone>();
ArrayList <Double> arr = new ArrayList<Double>();
list.add(new Telephone(1, 0.9));
list.add(new Telephone(268, 5.1 ));
list.add(new Telephone(46, 0.17 ));
list.add(new Telephone(46, 0.01));
list.add(new Telephone(4631, 0.15 ));
list.add(new Telephone(4620, 0.0 ));
list.add(new Telephone(468, 0.15 ));
list.add(new Telephone(46, 0.02));
list.add(new Telephone(4673, 0.9));
list.add(new Telephone(46732,1.1));
list.add(new Telephone(1, 0.91 ));
list.add(new Telephone(44, 0.4 ));
list.add(new Telephone(92, 0.4 ));
list.add(new Telephone(467, 0.2 ));
list.add(new Telephone(4, 0.0001 ));
list.add(new Telephone(1, 0.92 ));
list.add(new Telephone(44, 0.5 ));
list.add(new Telephone(467, 1.0 ));
list.add(new Telephone(48, 1.2 ));
list.add(new Telephone(4, 0.1));
Collections.sort(list, new Telephone());
for ( int i=0; i < list.size()-1; i++)
{
arr.clear();
while ( list.get(i).getCountryCode()== list.get(i+1).getCountryCode())
{
arr.add(list.get(i).getPrice()) ;
i=i+1;
}
arr.add(list.get(i).getPrice());
arr.trimToSize();
System.out.println( " Max value is " + Collections.max(arr).toString() + " for " +list.get(i).getCountryCode());
}
}
}