作为一名 Java 初学者,我正在做一些练习,但我就是无法让它发挥作用。
这就是我正在处理的内容:
public static Set<Person> prefixName(final Set<Person> persons, final String prefix) {
...
}
集合由名称组成,而前缀是名称的子字符串(或不是)。因此,对于 persons = {Larry, Dave, Laura},
prefix = La
,该方法将返回 {Larry, Laura}
我向我的一个 friend 寻求帮助,他说要调查一下流。由于我正在使用的书还没有提到流,所以我相信还有一个更简单、更适合初学者的解决方案!
This基本上是同样的问题,但是使用 TreeSet,它显然有一个非常方便的方法来解决这个问题。
最佳答案
通用集合不能利用知道前缀来查找元素。您需要遍历整个集合并检查每个条目。
TreeSet
但是可以利用这些知识,因为其中的条目按前缀排序。为了找到所有前缀,您只需要获取以前缀为根的整个子树,这可以快速计算。
这是显示 TreeSet
内部结构的插图:
这是明显幼稚的实现:
public static Set<Person> prefixName(final Set<Person> persons, final String prefix) {
final Set<Person> personsWithPrefix = new HashSet<>();
for (final Person person : persons) {
if (person.getName().startsWith(prefix)) {
personsWithPrefix.add(person);
}
}
return personsWithPrefix;
}
或者使用流的更紧凑的Java 8解决方案:
public static Set<Person> prefixName(final Set<Person> persons, final String prefix) {
return persons.stream()
.filter(person -> person.getName().startsWith(prefix))
.collect(Collectors.toSet());
}
关于java - 在 Set 中查找包含前缀的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46625774/