in computer-algorithm/src/main/java/org/apache/hugegraph/computer/algorithm/community/lpa/Lpa.java [67:98]
private Id voteLabel(Iterator<Id> messages) {
// Calculate label frequency
Map<Id, MutableInt> labels = new HashMap<>();
assert messages.hasNext();
while (messages.hasNext()) {
Id label = messages.next();
MutableInt labelCount = labels.get(label);
if (labelCount != null) {
labelCount.increment();
} else {
labels.put(label, new MutableInt(1));
}
}
// Calculate the labels with maximum frequency
List<Id> maxLabels = new ArrayList<>();
int maxFreq = 1;
for (Map.Entry<Id, MutableInt> e : labels.entrySet()) {
int value = e.getValue().intValue();
if (value > maxFreq) {
maxFreq = value;
maxLabels.clear();
}
if (value == maxFreq) {
maxLabels.add(e.getKey());
}
}
// Random choice
int selected = this.random.nextInt(maxLabels.size());
return maxLabels.get(selected);
}