zoukankan      html  css  js  c++  java
  • 使用guava从列表中删除重复

    我们怎样才能删除重复项从列表与guavaAPI的帮助? 目前,我下面这个:

    private List<T> removeDuplicate(List<T> list){
    return new ArrayList<T>(new LinkedHashSet<T>(list));
    }
    


    本文地址 :CodeGo.net/499388/ 
    ------------------------------------------------------------------------------------------------------------------------- 
    1. 可能是最有效的方法是ImmutableSet.copyOf(list).asList(),从而消除了重复和保留的迭代顺序。 (但你与LinkedHashSet是几乎一样有效,并且不会扔了空值上,在你真正想要的空值在您的收藏万一。) 
    2. 我喜欢为它的简单性。路易斯的答案(而且不需要2全迭代唯一的答案),但不幸的是在现实世界中,你经常会遇到的情况,其中null确实发生。这里有一个稍长空安全的版本:

    ImmutableSet.copyOf(
     Iterables.filter(
      list, Predicates.not(Predicates.isNull()))).asList();
    

    或者 CodeGo.net,用静态导入:

    ImmutableSet.copyOf(filter(list, not(isNull()))).asList();
    

    当然,你需要知道的事实,即所有null值将被从列表中丢失。 
    3. 如果您guava不惜任何代价,你可以做

    return new ArrayList<T>(HashMultiSet<T>.create(list).elementSet())
    


    4. 我真的不使用(Linked)HashMultiSet做任务,以完成ArrayList(Linked)HashSet像上面-它的可读性变差的普通Java和(可能)效率较低。 相反,在静态工厂构造函数,例如newArrayListnewLinkedHashSet要避免所有这些<T>S:

    private static <T> List<T> removeDuplicate(final List<T> list) {
     return Lists.newArrayList(Sets.newLinkedHashSet(list));
    }
    

    但是,你能做到的更多的“guava路”-通过避免空值不可变集合。 所以,如果你的收藏不能有空我会一成不变的设置,而不是可变的,低效率的一种:

    private static <T> List<T> removeDuplicate(final List<T> list) {
     return Lists.newArrayList(ImmutableSet.copyOf(list));
    }
    

    它仍然复制对象的两倍,因此考虑是完全不可改变的,签名的回报ImmutableList

    private static <T> ImmutableList<T> removeDuplicate(final List<T> list) {
     return ImmutableSet.copyOf(list).asList();
    }
    

    这种方式有参与只有一个拷贝,ImmutableCollection.asList()返回一个视图。 
    5. 你可以尝试guava的多重API来删除duplicates.Just添加您的列表中做设置 多重

  • 相关阅读:
    微信支付Native扫码支付模式二之CodeIgniter集成篇
    如何使用硬盘安装debian8.3?
    使用git将代码push到osc上
    树莓派(Raspberry Pi)搭建简单的lamp服务
    win下修改mysql默认的字符集以防止乱码出现
    CodeIgniter2.2.0-在控制器里调用load失败报错的问题
    Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录
    linux下mono的安装与卸载
    asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
    使用NPOI将数据导出为word格式里的table
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318111.html
Copyright © 2011-2022 走看看