mar*_*122 2 java set java-stream
以给定的字符串为例:例如,My name is James Bond iee我想要Map将以character为键,将字符串集作为值(该字符串集是从相应字符键开头的字符串)- Map<Character,Set<String>>。例如:
m - my, n - name, i - is, iee, j - james etc.
我已经从标点符号和用于查找字符的书面方法中清除了字符串。在我的示例中:(m,n,u,j,b)
这些方法:
static String getPurifiedSentenceFromPunctuationMarks(String sentence) {
return sentence.replaceAll("\\p{P}", "");
}
static Set<Character> getEveryCharacterOccuringInSentence(String sentence) {
return sentence.chars()
.mapToObj(e -> (char) e).collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
现在,我想遍历每个字符和每个字符串以找到这些单词,但是我在为每个字符创建集合方面感到挣扎:
String purifiedSentenceFromPunctuationMarks = AP.getPurifiedSentenceFromPunctuationMarks(sentence);
Set<Character> characters = AP.getEveryCharacterOccuringInSentence(purifiedSentenceFromPunctuationMarks);
String[] words = purifiedSentenceFromPunctuationMarks.split("\\s");
Map<Character, Set<String>> characterWithAccordingWord = new LinkedHashMap<>();
Set<String> nonRepeatableWords = new HashSet<>();
for (char iteratedCharacter : characters) {
for (String iteratedWord : words) {
if (iteratedWord.indexOf(iteratedCharacter) >= 0) {
characterWithAccordingWord.put(iteratedCharacter, )
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,Ive在需要添加字符串以设置为的那一刻停止了iteratedCharacter。怎么做?也许使用流效果更好?我最想在这里使用流。
使用流,一旦您拥有中所有单词的数组String[] words,就可以按它们的第一个字符将它们分组collect为Setas:
Map<Character, Set<String>> characterWithAccordingWord =
Arrays.stream(words).collect(Collectors.groupingBy(word -> word.charAt(0),
Collectors.toSet()));
Run Code Online (Sandbox Code Playgroud)