Java streams allMatch()中的不可比较类型capture和int

Java streams allMatch()中的不可比较类型capture和int,java,java-8,x509certificate,x509,Java,Java 8,X509certificate,X509,我有X509证书。我正试图从中提取所有SAN。之后,我想确保SAN的类型为dNSName,即列表中的第一个条目应为值为2的整数。参考- 下面的表达式编译失败,表示“不可比较的类型捕获和int” certificate.getSubjectAlternativeNames().stream().allMatch(x->x.get(0)==2) 但是,以下表达式返回True certificate.getSubjectAlternativeNames().stream().allMatch(x->x

我有X509证书。我正试图从中提取所有SAN。之后,我想确保SAN的类型为dNSName,即列表中的第一个条目应为值为2的整数。参考-

下面的表达式编译失败,表示“不可比较的类型捕获和int”

certificate.getSubjectAlternativeNames().stream().allMatch(x->x.get(0)==2)

但是,以下表达式返回True

certificate.getSubjectAlternativeNames().stream().allMatch(x->x.get(0.toString().equals(“2”))

我不想将其转换为字符串,然后将其与字符串匹配。这里我只需要一个整数比较。我怎么做

这里我只需要一个整数比较

您应该能够简单地在
列表的第一个元素上调用
对象#equals

certificate.getSubjectAlternativeNames()
           .stream()
           .allMatch(x -> x.get(0).equals(2))
由于
列表
的泛型类型是捕获类型
,因此编译器无法推断对象
的类型,也不允许您将其与原语(直接)进行比较


要添加到这一点:
List
s只能存储对象类型,而不能存储primitve。只有在对象可以取消装箱的情况下,才能将对象与具有
=
的基本体进行比较。为此,对象的类型必须可以静态推断为装箱基本类型(
Integer
Long
,…)@worldssender之一,但如果集合元素的类型是
Integer
,则使用
equals
,这是非常危险的,因为如果类型不匹配,例如,如果元素实际上是
长的
值,则该操作将自动失败。更好的选择是
x->(Integer)x.get(0)==1
,如果元素类型的假设是错误的,这将很明显。
List<List<?>> list = List.of(List.of(1, 2, 3));

System.out.println(list.stream().allMatch(x -> x.get(0).equals(1)));
true