我有一个地图(假设每个例子都是人),如下所示:
public Map<String, Person> personMap = new HashMap<>();
我想要搜索这个地图,按名字过滤。我有这段代码,但我很好奇是否有更好的或更优雅的方式来完成它。
public ArrayList<Person> searchByName(String query) {
ArrayList<Person> listOfPeople = new ArrayList<>();
for (Map.Entry<String, Person> entry : this.personMap.entrySet()) {
Person person = entry.getValue();
String name = entry.getValue().getName();
if (name.toLowerCase().contains(query.toLowerCase())) {
listOfPeople.add(person);
}
}
if (listOfPeople.isEmpty()) {
throw new IllegalStateException("This data doesn't appear on the Map");
}
return listOfPeople;
}
提前感谢
发布于 2018-06-11 08:59:14
我认为您的解决方案接近最佳(除了使用流)。我会将for
子句简化为:
for (Person person : this.personMap.values()) {
String name = person.getName();
if (name.toLowerCase().contains(query.toLowerCase())) {
listOfPeople.add(person);
}
}
因为您根本没有使用map的键。
发布于 2018-06-11 09:04:46
您可以使用java Stream API。
personMap.entrySet().stream()
.filter(entry -> entry.getValue().getName().toLowerCase().contains(query.toLowerCase())
.map(entry -> entry.getValue())
.collect(Collectors.toList());
https://stackoverflow.com/questions/50789322
复制相似问题