Java集合:基于标准的遍历或集合的另一个视图

时间:2015-08-14 07:18:13

标签: java collections

有没有办法或者是否有任何可用的java库可以让我遍历所选的列表项目(不是全部)满足条件?

例如:我有一份员工清单,我想要遍历只有经理的员工名单。我不想提出条件或过滤器但只想遍历经理列表。

为此,我可以在创建列表时定义条件。因此,每当我将一个项目添加到列表中时,指向满足条件的列表项的指针将保存在另一个列表中。

这就像为原始列表提供另一个视图。

虽然可以使用过滤器完成,但我必须基本上访问每个列表项,比较然后处理。

它可能会有内存开销,因为它会为每个条件维护额外的列表,但我相信它会缩短处理时间。

我希望我的列表平均不会包含超过30个项目。

更新

经过一番头脑风暴,我提出了以下解决方案。

View<T>
    List<T>
    boolean checkCondition(T);
    boolean updateView(T);

    managerView
    boolean checkCondition(T){
        return token.getDesignation == designation.MANAGER;
    }

    salaryView
    boolean checkCondition(T){
        :
    }

ViewableList<T> list
    list.addView(managerView)
    list.addView(salaryView)


ViewableList<T>

    List<View<T>> views;


    add(T){
        originalList.add(T);
        foreach views{
         if(view.checkCondition(T)){
            view.add(T);
         }
        }
    }

    addView(View){
        views.add(view)
    }

我可以轻松实现插入,搜索和删除操作。但是当更新对象的视野时,我仍然难以更新视图。

可能的解决方案

我注释列表项的字段;写一个方面。因此,每当注释字段的值发生更改时,它都可以调用相应视图的updateView()。

Employee{
   @View(type=DesignationView.class)
   Designation designation;
}

但是有可能在构造多个视图时使用了一个字段。所以我必须在@View注释中传递视图类列表,这看起来很奇怪。而且,我想避免因性能而使用反射和方面。否则,付出所有这些努力是没有任何意义的。

请知道您是否知道如何实施它。

2 个答案:

答案 0 :(得分:0)

使用Map会不会更好。在此映射中,键可以是类别,值将列出。因此,当遍历只获取该密钥的条目时。

答案 1 :(得分:0)

你怎么期望这样的事情被编码为如此通用,以至于它作为通用库而不是特定于你非常狭隘的要求有用呢?
这是唯一一种实现,当然作为一个独立的库发布是一个明智的想法
所以不,这样的事情不会存在。你将不得不创建一些自己的代码。