Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java stream groupby并同时加入以进行csv导出_Java_Java Stream - Fatal编程技术网

Java stream groupby并同时加入以进行csv导出

Java stream groupby并同时加入以进行csv导出,java,java-stream,Java,Java Stream,我有一个字符串列表: “蓝色” “红色” “蓝色” “黄色” 我希望对其进行流式处理并获得以下结果: “蓝色;2\nred;1\n黄色;1” 这样我就得到了颜色的csv,以及它们出现的次数 到目前为止,我一直在努力工作,以下是我所拥有的: public static void main(String[] args) { System.out.println( List.of("blue", "red", "blue", "yellow")

我有一个字符串列表: “蓝色” “红色” “蓝色” “黄色”

我希望对其进行流式处理并获得以下结果:

“蓝色;2\nred;1\n黄色;1”

这样我就得到了颜色的csv,以及它们出现的次数

到目前为止,我一直在努力工作,以下是我所拥有的:

 public static void main(String[] args) {
        System.out.println(
                List.of("blue", "red", "blue", "yellow")
                        .stream()
                        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        );
// result: {red=1, blue=2, yellow=1}
    }

只需对结果条目进行流式处理,并根据您的意愿对其进行处理:

String output = Stream.of("blue", "red", "blue", "yellow")
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        .entrySet()
        .stream()
      //.sorted(Comparator.comparing(Entry::getValue).reversed())
        .map(e -> e.getKey() + ";" + e.getValue())
        .collect(Collectors.joining("\n"));
不清楚订单是否是一项要求,但您可以先取消注释
sorted
行以获得更高的计数


请注意,这不处理引用、转义等。如果您需要更复杂的CSV逻辑,您可能需要使用库。

只需对结果项进行流式处理,并根据需要对其进行处理:

String output = Stream.of("blue", "red", "blue", "yellow")
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        .entrySet()
        .stream()
      //.sorted(Comparator.comparing(Entry::getValue).reversed())
        .map(e -> e.getKey() + ";" + e.getValue())
        .collect(Collectors.joining("\n"));
不清楚订单是否是一项要求,但您可以先取消注释
sorted
行以获得更高的计数


请注意,这不处理引用、转义等。如果您需要更复杂的CSV逻辑,您可能需要使用库。

a
LinkedHashMap
提供程序将为您排序密钥

import java.util.*;
导入java.util.function.function;
导入java.util.stream.collector;
公共类代码段{
公共静态void main(字符串[]args){
列表颜色=数组。asList(“蓝色”、“红色”、“蓝色”、“黄色”);
字符串输出=colors.stream()
.collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,
Collectors.counting())
.entrySet().stream().map(条目->条目.getKey()+“;”+条目.getValue())
.collect(收集器.连接(\\n”);
System.out.println(输出);//蓝色;2\nred;1\nyellow;1
}
}

A
LinkedHashMap
提供商将为您排序密钥

import java.util.*;
导入java.util.function.function;
导入java.util.stream.collector;
公共类代码段{
公共静态void main(字符串[]args){
列表颜色=数组。asList(“蓝色”、“红色”、“蓝色”、“黄色”);
字符串输出=colors.stream()
.collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,
Collectors.counting())
.entrySet().stream().map(条目->条目.getKey()+“;”+条目.getValue())
.collect(收集器.连接(\\n”);
System.out.println(输出);//蓝色;2\nred;1\nyellow;1
}
}

那么按值排序,然后按频率排序?地图不能保证键的排序,除非您使用像
树地图这样的东西,它在整个时间内保持平衡。您可以提供自己的
Map
实现。@Mr.polywhill
TreeMap
不会对值进行排序。@shmosel是的,您是对的,它保持原始顺序。。。不知道我在想什么。我指的是一个
LinkedHashMap
;但问题仍然存在,您可以提供自己的地图。分组后使用库导出为CSV。所以按值排序,然后按频率排序?地图不能保证键的排序,除非您使用像
树地图这样的东西,它在整个时间内保持平衡。您可以提供自己的
Map
实现。@Mr.polywhill
TreeMap
不会对值进行排序。@shmosel是的,您是对的,它保持原始顺序。。。不知道我在想什么。我指的是一个
LinkedHashMap
;但关键仍然是,您可以提供自己的映射。使用库在分组后导出为CSV。或者您可以签出番石榴。或者您可以签出番石榴。LinkedHashMap不按键排序元素,但在迭代时保持输入顺序。LinkedHashMap不按键排序元素,但在迭代时保持输入顺序。