• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ljacqu / wordeval / 14540577447

18 Apr 2025 07:23PM UTC coverage: 51.439% (-6.2%) from 57.611%
14540577447

push

github

ljacqu
Remove EvaluationResult type param from all Evaluator interfaces

239 of 546 branches covered (43.77%)

16 of 17 new or added lines in 16 files covered. (94.12%)

193 existing lines in 17 files now uncovered.

679 of 1320 relevant lines covered (51.44%)

3.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

37.5
/src/main/java/ch/jalu/wordeval/evaluators/impl/Anagrams.java
1
package ch.jalu.wordeval.evaluators.impl;
2

3
import ch.jalu.wordeval.dictionary.Word;
4
import ch.jalu.wordeval.evaluators.AllWordsEvaluator;
5
import ch.jalu.wordeval.evaluators.result.WordGroupWithKey;
6
import com.google.common.collect.ArrayListMultimap;
7
import com.google.common.collect.HashMultimap;
8
import com.google.common.collect.ListMultimap;
9
import com.google.common.collect.Multimaps;
10
import com.google.common.collect.SetMultimap;
11
import lombok.Getter;
12

13
import java.util.ArrayList;
14
import java.util.Arrays;
15
import java.util.Collection;
16
import java.util.Comparator;
17
import java.util.HashSet;
18
import java.util.List;
19
import java.util.Set;
20
import java.util.function.Function;
21

22
/**
23
 * Collects anagram groups (e.g. "acre", "care", "race").
24
 */
25
public class Anagrams implements AllWordsEvaluator {
2✔
26

27
  @Getter
6✔
28
  private final List<WordGroupWithKey> results = new ArrayList<>();
29

30
  @Override
31
  public void evaluate(Collection<Word> words) {
32
    SetMultimap<String, Word> wordsBySortedChars = words.stream()
4✔
33
      .collect(Multimaps.toMultimap(this::sortLettersAlphabetically, Function.identity(), HashMultimap::create));
6✔
34

35
    Multimaps.asMap(wordsBySortedChars).forEach((sequence, groupedWords) -> {
5✔
36
      if (groupedWords.size() > 1) {
4✔
37
        results.add(new WordGroupWithKey(groupedWords, sequence));
9✔
38
      }
39
    });
1✔
40
  }
1✔
41

42
  @Override
43
  public ListMultimap<Object, Object> getTopResults(int topScores, int maxLimit) {
UNCOV
44
    Comparator<WordGroupWithKey> comparator = Comparator.comparingInt((WordGroupWithKey group) -> group.getWords().size())
×
UNCOV
45
        .thenComparing(group -> group.getKey().length())
×
UNCOV
46
        .reversed(); // todo: unit test
×
47

UNCOV
48
    List<WordGroupWithKey> sortedResult = results.stream()
×
UNCOV
49
        .sorted(comparator)
×
UNCOV
50
        .toList();
×
51

UNCOV
52
    Set<Integer> uniqueValues = new HashSet<>();
×
UNCOV
53
    ListMultimap<Object, Object> filteredResults = ArrayListMultimap.create();
×
UNCOV
54
    for (WordGroupWithKey wordGroup : sortedResult) {
×
UNCOV
55
      int score = wordGroup.getWords().size();
×
UNCOV
56
      if (uniqueValues.add(score) && uniqueValues.size() > topScores) {
×
UNCOV
57
        break;
×
58
      }
UNCOV
59
      List<String> wordList = wordGroup.getWords().stream()
×
UNCOV
60
          .map(Word::getRaw)
×
UNCOV
61
          .toList();
×
UNCOV
62
      filteredResults.put(score, wordList);
×
UNCOV
63
      if (filteredResults.size() >= maxLimit) {
×
UNCOV
64
        break;
×
65
      }
UNCOV
66
    }
×
67

UNCOV
68
    return filteredResults;
×
69
  }
70

71
  private String sortLettersAlphabetically(Word word) {
72
    char[] chars = word.getWithoutAccentsWordCharsOnly().toCharArray();
4✔
73
    Arrays.sort(chars);
2✔
74
    return new String(chars);
5✔
75
  }
76
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc