将Kotlin Lambda表达式转换为Java

将Kotlin Lambda表达式转换为Java,java,kotlin,lambda,java-8,java-stream,Java,Kotlin,Lambda,Java 8,Java Stream,我需要将以下内容转换为Java8,但是我不确定所需的语法 val iterator = color.toList().iterator() iterator.forEach { cols-> println("$cols count: " + (numbers .map{a -> colors[a]} .count{

我需要将以下内容转换为Java8,但是我不确定所需的语法

val iterator = color.toList().iterator()
iterator.forEach { cols->

    println("$cols count: " + 
            (numbers
            .map{a -> colors[a]}                                           
            .count{it == (cols)})
)
}
1-5之间有30个数字,对应于字符串数组(列表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()
                    ));
List colors=new ArrayList();
//填好的名单
colors.stream().forEach(cols->
System.out.println(cols+“count:”+numbers2
.mapToObj(i->colorsarray[i])
.count()
));

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

Kotlin的
count
将lambda返回布尔值作为参数,并且只计算满足谓词的元素。您需要对发生的事件进行汇总(过滤想法来自@biziclop,谢谢):


您可能需要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 input=new ArrayList();//用颜色草签
Map 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);
List colors=array.asList(“蓝色”、“红色”、“绿色”、“黄色”、“黑色”);
列表编号=数组.asList(1,3,0,0,2,3,1,4,0,2,4,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));
Map colorCount=numbers.stream()
.collect(Collectors.groupingBy(i->colors.get(i),Collectors.counting());
colorCount.forEach((k,v)->System.out.println(k+“count:+v));

我真的很困惑,你想用这两段代码实现什么。请详细说明样本输入、预期和实际输出。另外,请阅读如何创建一个颜色列表,蓝-红-绿-黄-黑,数字列表,1-30,值介于0和4之间。第一段代码在kotlin中工作,指定一种与数值对应的颜色,并输出每种颜色出现的次数。现在我需要将其转换为Java8。预期的输出正如我在上面发布的,实际的输出是nothing,因为nothing打印出来。您好,谢谢您的回复,但是我在最后一行得到了一个“cannot resolve method sum()”,知道为什么吗?或者更习惯地说,您只需执行
.filter(c->c==cols.count()。是的,好多了,我改了,谢谢;)<代码>=
可能需要
等于
(取决于
c
的类型)。
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));