![JAR search and dependency download from the Maven repository](/logo.png)
nl.hsac.fitnesse.testrun.PositionFinder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hsac-fitnesse-plugin Show documentation
Show all versions of hsac-fitnesse-plugin Show documentation
Plugin to add features to a FitNesse installation
The newest version!
package nl.hsac.fitnesse.testrun;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.stream.IntStream;
/**
* Finds position for each element based on supplied durations.
*/
public class PositionFinder {
public Map getPositionMap(List source, List> durations, int partitionCount) {
if (source.isEmpty()) {
return Collections.emptyMap();
}
Map positionMap = new LinkedHashMap<>(source.size() * 2);
// sort by descending duration
PriorityQueue> durationQueue = new PriorityQueue<>(source.size(), Comparator.reverseOrder());
durations.stream().filter(i -> source.contains(i.getElement())).forEach(durationQueue::add);
List partitionSizes = new ArrayList<>(partitionCount);
for (int i = 0; i < partitionCount; i++) {
partitionSizes.add(0L);
}
while (!durationQueue.isEmpty()) {
// add record to partition with smallest total duration
DurationRecord record = durationQueue.poll();
long duration = record.getDuration();
int indexToAddTo = smallestPartition(partitionSizes);
long currentSize = partitionSizes.get(indexToAddTo);
partitionSizes.set(indexToAddTo, currentSize + duration);
positionMap.put(record.getElement(), indexToAddTo);
}
return positionMap;
}
protected int smallestPartition(List partitionSizes) {
return IntStream.range(0, partitionSizes.size())
.reduce((i, j) -> partitionSizes.get(i) > partitionSizes.get(j) ? j : i)
.getAsInt();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy