获取具有指定ID的另一个List中的元素列表

时间:2015-06-16 12:58:19

标签: java

我有一个List<Element> elements,其中类Element具有属性id - 它是Long。我还有List<Long> ids。现在我需要从elements列表对象中获取id列表中存在ids道具的列表对象。

我用这两个for循环,但我认为这不是最好的选择。

我如何改善表现?

 public class Element{

   Long id;

   public Element(Long id){
     this.id = id;
   }

   public Long getId( ){
     return id;
   }

   public static void main(String []args){
     List<Element> elements= Arrays.asList(new Element(1),new Element(2),new Element(3), new Element(5), new Element(5));
     List<Long> ids= Arrays.asList(3,4,1);
     List<Element> returnList = new ArrayList<Alement>();

     for(int i = 0; i < elements.size(); i++) {
        for(int j = 0; j < ids.size(); j++) {
            if (elements.get(i).getId() == ids.get(j))
                returnList.add(elements.get(i));
        }
     }

   }
 }

3 个答案:

答案 0 :(得分:4)

  

我如何改善表现?

您可以使用id作为键,使用HashMap作为元素。然后,在ids List上使用单个循环进行查找。 HashMap具有不变的查找复杂性。

答案 1 :(得分:1)

制作一组这样的ID:

    Set<Long> idSet = new HashSet<>(ids);
    List<Element> selected = elements.stream()
        .filter(element -> idSet.contains(element.getId()))
        .collect(Collectors.toList());

答案 2 :(得分:0)

您可以使用Google Guava filtering

    Iterable<Element> filteredElements = Iterables.filter(elements, new Predicate<Element>() {
        @Override
        public boolean apply(Element element) {
            return ids.contains(element.getId());
        }
    });
相关问题