我在番石榴多个集合中有以下数据。每一项都是由“:”分隔的三个项的组合字符串。我知道每个插槽的所有值。我使用这些值为交互式图形生成数据文件(通过将拆分的值填充到对象中,然后使用Gson打印对象)。
获取所有仅匹配1、1:2或1:2:3子串的所有项的累积计数的最佳方法是什么?我不停地使用流、forEach、映射和过滤器,但似乎无法编写一组优雅的循环。任何建议或例子都是有帮助的。
行政主管:医疗保健:美国x5
行政主管:医疗保健:马来西亚x2
执行:财务:美国x1
金融健康:技术:马来西亚x3
财务健康:技术:美国x2
财政健康:能源:美国x1
行政=8
FinancialHealth =6
行政人员:卫生保健=7
执行人员:财务=1
财务健康:技术=5
财政健康:能源=1
行政主管:医疗保健:美国=5
等。
发布于 2018-05-02 08:31:38
溪流在这里有很大的帮助,而且也不困难。我们需要在一条小溪里走三步:
allTheStrings.stream()
// First, we will multiply each string "A:B:C" using `flatMap`
// so that the stream contains "A", "A:B", and "A:B:C":
.flatMap(s -> Stream.of(s.substring(0, s.indexOf(":")),
s.substring(0, s.lastIndexOf(":")),
s))
// next, we are going to summarize multiple occurrences
// of the strings using a groupingBy collector:
.collect(Collectors.groupingBy(Function.identity(),
// This would return a Map<String, List<String>> containing each unique
// string mapped to its occurrences. But because you don't need the
// single occurrences, but instead just their number, we add a step
// to the collect which will make it return a Map<String, Long>
Collectors.counting()))因此,作为一个完整的例子:
Stream.of("Executive:Healthcare:United States", "Executive:Healthcare:United States",
"Executive:Healthcare:United States", "Executive:Healthcare:United States",
"Executive:Healthcare:United States", "Executive:Healthcare:Malaysia",
"Executive:Healthcare:Malaysia", "Executive:Financials:United States",
"FinancialHealth:Technology:Malaysia", "FinancialHealth:Technology:Malaysia",
"FinancialHealth:Technology:Malaysia", "FinancialHealth:Technology:United States",
"FinancialHealth:Technology:United States", "FinancialHealth:Energy:United States")
.flatMap(s -> Stream.of(s.substring(0, s.indexOf(":")), s.substring(0, s.lastIndexOf(":")), s))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.forEach(System.out::println);威尔输出
Executive=8
Executive:Healthcare=7
FinancialHealth:Technology=5
FinancialHealth=6
FinancialHealth:Energy=1
FinancialHealth:Technology:Malaysia=3
FinancialHealth:Energy:United States=1
Executive:Healthcare:United States=5
Executive:Financials:United States=1
FinancialHealth:Technology:United States=2
Executive:Healthcare:Malaysia=2
Executive:Financials=1https://stackoverflow.com/questions/50125968
复制相似问题