使用java中的集合排序列表的问题

时间:2014-08-28 13:50:16

标签: java sorting collections guava predicate

我有一个包含订单条目的列表。每个订单条目都有一个基本价格。我想在entry.basePrice降序排序这个列表(enty.basePrice == 0条目应该在底部)。

在此列表中,任何条目都不会有0个价格或一个条目。我这样做..

final Collection<AbstractOrderEntryModel> orderEntry = Collections2.filter(source.getEntries(),
            new Predicate<AbstractOrderEntryModel>()
            {
                @Override
                public boolean apply(final AbstractOrderEntryModel arg)
                {
                    return arg.getBasePrice().doubleValue() == 0 ? true : false;
                }
            });

这里我过滤了我的条目,其中baseprice = 0.0 现在我将如何在OrderEntry列表中删除并添加此项(orderEntry.iterator().next())

如果它不是推荐的解决方案,并且可以通过Collections.sort进行,那么请给我解决方案。

1 个答案:

答案 0 :(得分:0)

据我了解,您希望在列表末尾放置与谓词匹配的项目。这可以直截了当地完成:

List<AbstractOrderEntryModel> list=source.getEntries()
final Collection<AbstractOrderEntryModel> orderEntry = Collections2.filter(list,
  new Predicate<AbstractOrderEntryModel>()
  {
    public boolean apply(final AbstractOrderEntryModel arg)
    {
        return arg.getBasePrice().doubleValue() == 0;
    }
  });
if(!orderEntry.isEmpty()) {
  assert orderEntry.size()==1; // so you said in your question
  AbstractOrderEntryModel e=orderEntry.iterator().next();
  list.remove(e);
  list.add(e);
}