Несравненные типы захвата и int в потоках Java allMatch () - PullRequest
0 голосов
/ 02 мая 2018

У меня есть сертификат X509. Я пытаюсь извлечь из него все SAN. После этого я хочу убедиться, что SAN имеет тип dNSName - то есть первая запись в списке должна быть целым числом со значением 2. Ref- https://docs.oracle.com/javase/7/docs/api/java/security/cert/X509Certificate.html#getSubjectAlternativeNames()

Выражение, приведенное ниже, не может быть скомпилировано, говоря: «Несопоставимые типы capture и int»

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

Однако следующее выражение возвращает True.

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

Я не хочу преобразовывать его в строку, а затем сопоставлять его со строкой. Я просто хочу сравнение целых чисел здесь. Как я могу это сделать?

1 Ответ

0 голосов
/ 02 мая 2018

Я просто хочу сравнение целых чисел здесь.

Вы можете просто позвонить 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
...