Java 将以相同字符开头的每个键映射到wordlist
如何编写映射,使每个单词的初始字符映射到整个单词 考虑包含以下内容的单词列表:Java 将以相同字符开头的每个键映射到wordlist,java,list,hashmap,Java,List,Hashmap,如何编写映射,使每个单词的初始字符映射到整个单词 考虑包含以下内容的单词列表: 阿尔伯特 本 爱丽丝 塞西莉亚 输出应该是{a=[albert,alice],b=[ben],c=[cecilia]} 这就是我现在拥有的,但我不知道如何将每个键映射到所有对应的单词 地图类型为map bigMap protected WordStore(String file) { this.bigMap = new HashMap<>(); String line = "";
- 阿尔伯特
- 本
- 爱丽丝
- 塞西莉亚
{a=[albert,alice],b=[ben],c=[cecilia]}
这就是我现在拥有的,但我不知道如何将每个键映射到所有对应的单词
地图类型为map bigMap代码>
protected WordStore(String file) {
this.bigMap = new HashMap<>();
String line = "";
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file));)
{
this.wordlist = new ArrayList<String>();
wordlist.add(file);
while ( (line = bufferedReader.readLine()) != null){
bigMap.putIfAbsent(String.valueOf(line.charAt(0)), new ArrayList<>());
}
}
protectedwordstore(字符串文件){
this.bigMap=newhashmap();
字符串行=”;
try(BufferedReader BufferedReader=new BufferedReader(new FileReader(file));)
{
this.wordlist=new ArrayList();
添加(文件);
而((line=bufferedReader.readLine())!=null){
bigMap.putIfAbsent(String.valueOf(line.charAt(0)),新的ArrayList();
}
}
阅读所有行并将其添加到列表中。完成后,您可以使用分组依据
收集器完成手头的任务
this.bigMap = myList.stream()
.collect(Collectors.groupingBy(s -> s.substring(0, 1)));
或者,您可以一次读取文件和分组,如下所示:
try (Stream<String> stream = Files.lines(Paths.get(file))) {
this.bigMap = stream.collect(Collectors.groupingBy(s -> s.substring(0, 1)));
} catch (IOException e) {
e.printStackTrace();
}
您可以在不使用BufferedReader的情况下执行此操作,并将整个代码简化为:
protected WordStore(String file) {
this.bigMap = Files.lines(Paths.get(file))
.collect(Collectors.groupingBy(word -> word.substring(0, 1)));
}
这不会改变我的地图类型吗?谢谢,你的回答很详尽。我真的很感激。
protected WordStore(String file) {
this.bigMap = Files.lines(Paths.get(file))
.collect(Collectors.groupingBy(word -> word.substring(0, 1)));
}