[英]converting a java method to kotlin. Return a lambda expression
[英]Converting Kotlin Lambda Expression to Java
我需要将以下内容转换为 Java 8,但是我不确定所需的语法。
val iterator = color.toList().iterator()
iterator.forEach { cols->
println("$cols count: " +
(numbers
.map{a -> colors[a]}
.count{it == (cols)})
)
}
1-5有30个数字,对应一个字符串数组(颜色,在一个List数组列表中)
例如,我必须计算每种颜色的出现次数
green count:9
red count:3
这是我到目前为止所得到的
List<String> colors = new ArrayList<>();
//list filled
colors.stream().forEach(cols ->
System.out.println(cols + " count: " + numbers2
.mapToObj(i -> colorsarray[i])
.count()
));
但是它不打印任何东西。 colorarray[] 是一个普通的字符串数组,其值与 ArrayList 相同,但我制作了数组列表,因为我不知道如何对普通数组进行 lambda 操作。
Kotlin 的count
将一个 lambda 返回布尔值作为参数,并且只计算满足谓词的元素。 您需要对出现的次数求和(过滤器的想法来自@biziclop,谢谢):
colors.stream().forEach(cols ->
System.out.println(cols + " count: " + numbers2
.mapToObj(i -> colors[i])
.filter(c -> c.equals(cols))
.count()
));
您可能需要计数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));
我假设你有这样的事情:
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.