我作为Java初学者做了几个练习,但我无法让它工作。
这就是我正在使用的:
public static Set<Person> prefixName(final Set<Person> persons, final String prefix) {
...
}
Set由名称组成,而前缀是名称的子字符串(或不是)。因此,对于persons = {Larry, Dave, Laura},
prefix = La
,该方法将返回{Larry, Laura}
我问我的一个伙伴一些帮助,他说要看看溪流。由于我正在使用的这本书尚未提及任何关于流的文章,我相信它也有一个更简单,更初学者更友好的解决方案!
This基本上是同一个问题,但是使用TreeSet,显然有一个非常方便的方法。
答案 0 :(得分:2)
一般情况下,无法利用了解前缀以便查找元素。您将需要遍历整个集并检查每个条目。
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());
}