将Kotlin Lambda表达式转换为Java

时间:2019-03-13 14:01:31

标签: java lambda kotlin java-8

我需要将以下内容转换为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 arraylist中)

我必须计算每种颜色的出现次数,例如

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()
                    ));

但是它不打印任何内容。 colorsarray []是一个普通的String数组,其值与ArrayList相同,但是我制作了arraylist,因为我不知道如何对普通数组执行lambda操作。

3 个答案:

答案 0 :(得分:2)

Kotlin的<repo_root>/.git/info/attributes采用一个返回boolean的lambda作为参数,并且仅计算满足谓词的元素。您需要对出现的事件求和(过滤器思想来自@biziclop,谢谢):

count

答案 1 :(得分:2)

您可能需要将计数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));

答案 2 :(得分:0)

我假设您有这样的东西:

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));