我有一个Foo对象列表。活动的价值在每个对象中是不同的,并且相同的类别可以存在于多个对象中。我的应用程序UI中有两个用于类别和活动的组合框。
public class Foo
{
String category;
String activity;
}
我需要从Foo对象列表中的可用类别值加载类别组合框。当有人从组合框中选择一个类别时,我需要从Foo列表中与所选类别匹配的值加载活动组合框。
如果'全部'在类别组合框中选择所有活动将加载到活动组合框。当用户从活动组合框中选择一个活动时,相关的类别值将被加载到类别组合框中。
所以它是双向连接的。为了实现这个功能,我想到了使用两个映射,一个将类别映射为键,将活动映射为值。另一个地图将活动作为关键,将类别作为值。
除了使用2个地图实现此功能之外还有其他方法吗?
答案 0 :(得分:1)
如果这些组合框中没有很多元素,可以使用stream api来获取元素:
public List<String> getActivitiesForCategory(List<Foo> fooList, String category) {
return fooList.stream()
.filter(foo -> foo.getCategory().equals(category))
.map(Foo::getActivity)
.collect(Collectors.toList());
}
public List<String> getCategoriesForActivity(List<Foo> fooList, String activity) {
return fooList.stream()
.filter(foo -> foo.getActivity().equals(activity))
.map(Foo::getCategory)
.collect(Collectors.toList());
}
但如果你有很多元素,这可能不是一个非常有效的方法。在这种情况下,有两张地图:
category -> List<> activities
activity -> List<> categories
将是更好的选择