作者:薛薛Sying | 来源:互联网 | 2022-12-14 10:42
我有一个地图(比如人们,每个例子),像这样:
public Map persOnMap= new HashMap<>();
我想按名称搜索此地图过滤.我有这个代码,但我很好奇是否有更优化或更优雅的方式来做到这一点.
public ArrayList searchByName(String query) {
ArrayList listOfPeople = new ArrayList<>();
for (Map.Entry 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;
}
提前致谢
1> John Bolling..:
考虑到这一点,我认为我是那个将提供基于流的解决方案的人.我不是一个"现在用流做任何事情"的人,但是流提供了一种相当简单易读的方式来表达某种类型的计算,而你的是其中之一.结合我的观察,你应该直接使用地图的价值集,你得到这个:
listOfPeople = personMap.values().stream()
.filter(p -> p.getName().contains(query.toLowerCase()))
.collect(Collectors.toList());
if (listOfPeople.isEmpty()) {
// ...