Java流中的无与伦比的类型capture和int allMatch()

时间:2018-05-01 23:00:51

标签: java java-8 x509certificate x509

我有X509证书。我正在尝试从中提取所有SAN。之后,我想确保SAN的类型为dNSName - 这是列表中的第一个条目应该是值为2的整数.Ref- https://docs.oracle.com/javase/7/docs/api/java/security/cert/X509Certificate.html#getSubjectAlternativeNames()

下面的表达式无法编译说“Incomparable types capture and int”

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

但是,以下表达式返回True。

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

我不想将其转换为String,然后将其与字符串匹配。我只想在这里进行整数比较。我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

我只想在这里进行整数比较。

您应该只需在Object#equals的第一个元素上调用List

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

由于List的泛型类型是捕获类型?,编译器将无法推断其中Object的类型,并且不允许你可以将它与原语(直接)进行比较。

List<List<?>> list = List.of(List.of(1, 2, 3));

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

输出:

true