当前位置: 首页 > 知识库问答 >
问题:

如何检查Java8流中是否存在重复?

潘衡
2023-03-14

我的想法是:

list.size() != list.stream().distinct().count()

是最好的办法吗?

共有1个答案

周鸿云
2023-03-14

您的代码需要遍历所有元素。如果您希望确保没有重复项,那么简单的方法如下

public static <T> boolean areAllUnique(List<T> list){
    Set<T> set = new HashSet<>();

    for (T t: list){
        if (!set.add(t))
            return false;
    }

    return true;
}

会更高效,因为它可以在找到第一个非唯一元素时立即给出false

这个方法也可以用stream#allmatch重写为(假设非并行流和线程安全环境),这也是短路的(对于不满足提供的条件的第一个元素立即返回false)

public static <T> boolean areAllUnique(List<T> list){
    Set<T> set = new HashSet<>();
    return list.stream().allMatch(t -> set.add(t));
}
public static <T> boolean areAllUnique(List<T> list){
    return list.stream().allMatch(new HashSet<>()::add);
}
 类似资料:
  • 我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?

  • 问题内容: 在Java 8中,检查List是否包含重复项的最佳方法是什么? 我的想法是这样的: 这是最好的方法吗? 问题答案: 您的代码将需要遍历所有元素。如果要确保没有重复的简单方法,例如 会更有效,因为它可以在找到第一个非唯一元素时立即为您提供。 此方法也可以重写为(假设非并行流和线程安全的环境),使用该方法也很短路(对于不满足所提供条件的第一个元素,立即返回false)

  • 我使用POST方法提交表格。表单有一个输入字段:。 我试图检查参数是否存在: 但它不起作用

  • 问题内容: 我目前正在处理我的付费应用程序中的特定问题。内部包含许可检查。黑客通过修改应用apk / jar对该应用进行了修补。他们正在添加一个新类,以帮助绕过许可检查。 我的目标是以某种方式检查此特定补丁。如果找到它,我知道我的应用程序已被盗用。 关于如何知道包装上的某些东西有任何提示吗? 在我看来,对应用程序进行哈希处理并不是一个真正的选择。 我认为也许检查此类是否存在会有所帮助,但是如果他们

  • 问题内容: 我正在通过.NET应用程序中的ODBC驱动程序连接到Hive。是否存在查询以确定表是否已存在? 例如,在MSSQL中,您可以查询表,而在Netezza中,您可以查询表。 任何援助将不胜感激。 问题答案: 您可以通过两种方法进行检查: 1.)如@dimamah所建议,只需在此处添加一点,对于这种方法,您需要 2.)第二种方法是使用HiveMetastoreClient API,您可以在其

  • 我有一个js对象,如下所示。 我现在的代码是。 我的问题是我的代码可以有的值,但是如果在这种情况下我做了然后我就得到了现实。 如何确保我的数据具有和,以及可以具有值。 jsfiddle:https://jsfiddle.net/3jo7vx4p/ 我们衷心感谢您的帮助。