抱歉有限的代码,因为我完全不知道如何做,部分代码不是代码,只是解释我需要什么。基数是:
arrayList<double> resultTopTen = new arrayList<double();
arrayList<double> conditions = new arrayList<double(); // this arrayList can be of a very large size milion+, gets filled by different code
double result = 0;
for (int i = 0, i < conditions.size(), i++){ //multithread this
loopResult = conditions.get(i) + 5;
if (result.size() < 10){
resultTopTen.add(loopResult);
}
else{
//this part i don't know, if this loopResult belongs to the TOP 10 loopResults so far, just by size, replace the smallest one with current, so that i will get updated resultTopTen in this point of loop.
}
}
答案 0 :(得分:1)
使用Java 8的并行流。
static class TopN<T> {
final TreeSet<T> max;
final int size;
TopN(int size, Comparator<T> comparator) {
this.max = new TreeSet<>(comparator);
this.size = size;
}
void add(T n) {
max.add(n);
if (max.size() > size)
max.remove(max.last());
}
void combine(TopN<T> o) {
for (T e : o.max)
add(e);
}
}
public static void main(String[] args) {
List<Double> conditions = new ArrayList<>();
// add elements to conditions
TopN<Double> maxN = conditions.parallelStream()
.map(d -> d + 5) // some calculation
.collect(() -> new TopN<Double>(10, (a, b) -> Double.compare(a, b)),
TopN::add, TopN::combine);
System.out.println(maxN.max);
}
班级TopN
包含T的前n项。
此代码打印conditions
中的最小前10位(每个元素加5)。
答案 1 :(得分:-1)
让我简化您的问题,根据我的理解,请确认或添加:
要求:您希望从名为条件的列表中找到前10个结果。
过程:您希望多个线程处理您查找前10个结果的逻辑并累积结果以获得top10。
请同时分享你想要实现的逻辑以获得top10元素,或者它只是列表的降序以及它的前10个元素。