我的地图的值为GregorianCalendar
/ String
,密钥为Reminder
/ Contact
:
private final Map<Object, Object> elements = new HashMap<>();
另一个清单:
List<Reminder> result = new ArrayList<Reminder>
我想过滤地图并按提醒主题创建列表。
public class Reminder {
String name;
String theme;
...
}
我做了这样的方法,但它没有用。对于Object类型,方法getTheme()
未定义。
public List<Reminder> filterReminderByTheme(String theme) {
result = elements.values()
.stream()
.filter(reminder -> theme.equals(reminder.getValue().getTheme()))
.collect(Collectors.toList());
return result;
}
有些想法?
答案 0 :(得分:0)
,密钥是Reminder / Contact:
Java认为他们只是对象......值相同
Map<Object, Object> elements
我建议您重新定义地图以获得相应的类型,而elements.values()
将是右侧的类型,因此如果您希望这些作为值列表,则不应该是关键
Map<String, Reminder> elements
有了这个,过滤器将是
.filter(reminder -> theme.equals(reminder.getTheme()))
答案 1 :(得分:0)
在测试主题之前,您应首先确保该值为Reminder
。
您使用的引用是Object
引用,即使方法是在基础对象中定义的,您也无法使用Reminder
方法。
你首先需要施展它。要投射它,你必须首先确保它确实是instanceof
目标类。
public List<Reminder> filterReminderByTheme(String theme) {
result = elements.values()
.stream()
.filter(value -> value instanceof Reminder
&& theme.equals(((Reminder)value).getTheme()))
.collect(Collectors.toList());
return result;
}