繁体   English   中英

将 Kotlin Lambda 表达式转换为 Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM