public List<Path> removeUnwantedPaths(List<Path> listofPaths, List<String> ids) {
List<Path> entries;
entries = listofPaths.stream()
.filter(p -> ids.contains(p.getParent().getFileName().toString()))
.collect(Collectors.toList());
return entries;
}
entries
包含路径元素列表。元素未排序。我希望按ids
返回的p.getParent().getFileName().toString()
对它们进行排序,以便在我返回集合之前对列表进行组织和排序。如何使用Java 1.8 groupingBy()
对集合进行分组?所以如果我的列表最初包含以下元素:
212_Hello.txt
312_Hello.txt
516_something.xml
212_Hello.xml
我希望将列表组织为:
212_Hello.txt
212_Hello.xml
312_Hello.txt
516_something.xml
其中212,312,516是ID。
答案 0 :(得分:2)
以下是:
public static List<Path> removeUnwantedPaths(List<Path> listofPaths, List<String> ids) {
return listofPaths.stream()
.filter(p -> ids.contains(getIdFromPath(p)))
.sorted(Comparator.comparing(p -> getIdFromPath(p)))
.collect(Collectors.toList());
}
private static String getIdFromPath(Path p) {
return p.getParent().getFileName().toString();
}
它会:
这是基于给定路径总是这样的事实:/src/resource/files/{id}/212_Hello.txt
。
答案 1 :(得分:1)
这不是分组本身,分组意味着将唯一ID映射到路径。我认为你需要的是两个集合。像这样的东西
List<Path> entries;
entries = listofPaths.stream()
.filter(p -> ids.contains(p.getParent().getFileName().toString()))
.map( p -> p.getParent().getFileName() + "_" +p.getFileName())
.sorted(String::compareTo)
.map(Paths::get)
.collect(Collectors.toList());