实现双向连接的组合框

时间:2018-05-02 10:42:41

标签: java swing combobox

我有一个Foo对象列表。活动的价值在每个对象中是不同的,并且相同的类别可以存在于多个对象中。我的应用程序UI中有两个用于类别和活动的组合框。

public class Foo
{
  String category;
  String activity;
}

我需要从Foo对象列表中的可用类别值加载类别组合框。当有人从组合框中选择一个类别时,我需要从Foo列表中与所选类别匹配的值加载活动组合框。

如果'全部'在类别组合框中选择所有活动将加载到活动组合框。当用户从活动组合框中选择一个活动时,相关的类别值将被加载到类别组合框中。

所以它是双向连接的。为了实现这个功能,我想到了使用两个映射,一个将类别映射为键,将活动映射为值。另一个地图将活动作为关键,将类别作为值。

除了使用2个地图实现此功能之外还有其他方法吗?

1 个答案:

答案 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

将是更好的选择