【问题标题】:Remove duplicate beans from a list从列表中删除重复的 bean
【发布时间】:2012-04-20 18:01:17
【问题描述】:

我正在遍历一组 bean 并检查某些内容并添加到列表中。我只想添加一个特定项目的出现

List<PartsBean> beans = hotPartsDAO.getDeletedList(user);
List<FinalItemBean> finalItemList = new ArrayList<FinalItemBean>();
for (PartsBean bean : beans)
{
    if (!bean.getFinalItem().isActive())
    {
        finalItemList.add(bean.getFinalItem());
    }
}

在我得到的列表中

"test"
"test"
"test"
"hello"

我只想要 1 个“测试”

如果我要使用一个集合,那么我将如何修改它以便我可以将该集合的组件添加到下面的这个:

这就是它当前的传递方式List&lt;FinalItemBean&gt; list

protected final void buildFinalItemFilterList( Action action, PartsDAO dao, List<FinalItemBean> list )

    throws SQLException
{
    List<FinalItemBean> finalItems = dao.getAllFinalItems( false );
    FinalItemBean finalItem;

    for (FinalItemBean e: list )
    {
         finalItem = dao.getFinalItemById(e.getId());
         finalItems.add(finalItem);
    }

    Collections.sort( finalItems );
    action.setRequestAttribute("finalItems", finalItems );
}

【问题讨论】:

标签: java


【解决方案1】:

我建议使用FinalItemBeanSet 而不是列表。如果你有很多 bean,这甚至会提高性能,因为常见的 HashSet 实现在检查项目是否已经存在方面非常快。

【讨论】:

  • @Doc:使用Set 是个好主意。请注意,您还必须覆盖 EndItemBean 中的 equals()hashCode() 方法,它是 help Set 识别重复项的派生方法。
【解决方案2】:

接口列表有一个名为 contains 的方法,如果该“发生”在列表中,则返回 true,如果不在列表中,则返回 false。 喜欢:

if(!myList.contains(person)) myList.add(person);

很简单。您也可以使用 Set 代替,但是,我认为列表比集合更灵活,或者这就是一些开发人员所相信的。

【讨论】:

  • hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 这好像我可以保留我的清单
  • 在将其添加到列表之前将其用作条件,或者像其他人所说的那样使用集合。
  • 我要试试你所拥有的......那样我想在其他任何地方修改任何代码......无论哪种方式,集合看起来都很简单
  • 开发者不应该使用最灵活的界面,而应该使用最准确的界面。如果您不必按索引访问项目,那为什么要使用列表?
  • so yogu...我应该使用集合而不是列表?
【解决方案3】:

使用 HashSet 而不是 List。

您可以使用如下代码创建您的列表:

Set s = new HashSet();
//add here
List l = new ArrayList();
l.addAll(s);

【讨论】:

    【解决方案4】:

    使用Set,因为集合不允许重复 List 允许重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2012-07-11
      相关资源
      最近更新 更多