BallotLines<TCandidate extends Comparable>.parse constructor
BallotLines<TCandidate extends Comparable>.parse (})
Implementation
factory BallotLines.parse(
String input,
Map<String, TCandidate> Function(Set<String>) candidateFromText, {
String Function(TCandidate) candidateToText = _defaultCandidateText,
}) {
final map = LinkedHashMap<List<String>, int>(
equals: const ListEquality<String>().equals,
hashCode: const ListEquality<String>().hash,
);
for (var value in parse(input)) {
map[value.candidates] = (map[value.candidates] ?? 0) + value.count;
}
final candidateStrings = map.keys.expand((c) => c).toSet();
final candidateCache = candidateFromText(candidateStrings);
final lines = map.entries
.map(
(e) => BallotLine<TCandidate>(
e.value,
e.key
.map((string) => candidateCache[string]!)
.toList(growable: false),
),
)
.toList(growable: false)
..sort();
return BallotLines(lines, candidateToText: candidateToText);
}