我需要将以下内容转换为Java 8,但我不确定所需的语法。
val iterator = color.toList()。iterator()iterator.forEach {cols->
println(“$ cols count:”+ …
科特林的 count 将lambda返回布尔值作为参数,并仅计算满足谓词的元素。你需要总结事件(过滤器的想法来自@biziclop,谢谢):
count
colors.stream().forEach(cols -> System.out.println(cols + " count: " + numbers2 .mapToObj(i -> colors[i]) .filter(c -> c.equals(cols)) .count() ));
我假设你有这样的事情:
List<String> colors = Arrays.asList("blue","red", "green", "yellow", "black"); List<Integer> numbers = Arrays.asList(1,3,0,0,2,3,1,4,0,2,4,3,3,3,2,0);
数字列表中的值对应于颜色列表中的索引。如果是这种情况,那就做一些像@Naman已经提出的建议:
Map<String, Long> colorCount = numbers.stream() .collect(Collectors.groupingBy(i -> colors.get(i), Collectors.counting())); colorCount.forEach((k,v) -> System.out.println(k + " count: " + v));
你可能需要计数 groupingBy 颜色为:
groupingBy
List<String> input = new ArrayList<>(); // initialised with colors Map<String, Long> colorCount = input.stream() .collect(Collectors.groupingBy(i -> i, Collectors.counting())); colorCount.forEach((k,v) -> System.out.println(k + " count: " + v));