Вот альтернативный подход, который использует группировку для имитации сводной таблицы:
List<String> rights = inputArray.stream()
.map(Pair::getRight)
.distinct()
.sorted()
.collect(Collectors.toList());
List<Pair<String, Map<String, Boolean>>> mapping = inputArray.stream()
.collect(Collectors.groupingBy(Pair::getLeft,
Collectors.mapping(Pair::getRight, Collectors.toSet())))
.entrySet().stream()
.map(entry -> {
Map<String, Boolean> values = new HashMap<>();
rights.stream().forEach(v -> {
values.put(v, entry.getValue().contains(v) ? Boolean.TRUE : Boolean.FALSE);
});
return Pair.of(entry.getKey(), values);
}).collect(Collectors.toList());
И печать этой карты приводит к следующему:
rights.forEach(r -> System.out.print(r + " | "));
System.out.println();
mapping.forEach((key) -> {
StringBuilder sb = new StringBuilder(key.getLeft() + " | ");
rights.forEach(rr -> sb.append((key.getRight().get(rr) ? " 1" : " 0") + "|"));
System.out.println(sb);
});
Результат:
value1 | value2| value3| value4|
argument1 | 1| 1| 0| 1|
argument2 | 0| 1| 0| 1|
argument3 | 1| 1| 1| 0|
Если вам нужна только линия SKU, вы можете попробовать использовать этот локатор:
//div[@class="item-list__meta"]/br[1]/preceding-sibling::text()