Помогите реализовать addToMap с помощью gefOrDefault
package src;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
private static Pattern pattern = Pattern.compile("class\\s+(?<class>\\w+)(\\s+extends\\s+(?<extends>\\w+))?(\\s+implements\\s+(?<implements>\\w+))?");
private static Map<String, Set<String>> classMap = new HashMap<>();
public static void main(String[] args) throws IOException {
File src = new File("D:\\untitled1\\src");
listFilesForFolder(src);
classMap.forEach((key, value) -> System.out.println(key + " : " + value));
}
public static void listFilesForFolder(final File folder) throws IOException {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
parseFile(fileEntry);
}
}
}
private static void parseFile(File file) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
reader.lines().forEach(line -> {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
String s = matcher.group();
addToMap(s);
}
});
}
}
private static void addToMap(String s) {
String[] split = s.split("(\\sextends\\s|\\simplements\\s|\\s\\{|,\\s)");
String child = split[0];
for (int i = 1; i < split.length; i++) {
String parent = split[i];
if (!classMap.containsKey(split[i])) {
Set<String> set = new HashSet<>();
set.add(child);
classMap.put(parent, set);
} else {
classMap.get(parent).add(child);
}
}
}
}
Тут больше подходит computeIfAbsent(K, Function).
null
, в карту его не поместит. Но будет возвращено).Код:
for(int i = 1; i < split.length; i++) {
classMap.computeIfAbsent(split[i], key -> new HashSet<>()).add(child);
}
А если стоит конкретная цель — применить getOrDefault(Object, V), то все будет попроще.
Код:
for(int i = 1; i < split.length; i++) {
Set<String> set = classMap.getOrDefault(split[i], new HashSet<>());
set.add(child);
if(set.size() == 1) classMap.put(split[i], set);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть два многоугольника заданных массивами с координатамиНужно как-то объединить их в один многоугольник и получить на выходе новый массив...