首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中多个集合中的子串计数

Java中多个集合中的子串计数
EN

Stack Overflow用户
提问于 2018-05-02 01:28:28
回答 1查看 62关注 0票数 0

我在番石榴多个集合中有以下数据。每一项都是由“:”分隔的三个项的组合字符串。我知道每个插槽的所有值。我使用这些值为交互式图形生成数据文件(通过将拆分的值填充到对象中,然后使用Gson打印对象)。

获取所有仅匹配1、1:2或1:2:3子串的所有项的累积计数的最佳方法是什么?我不停地使用流、forEach、映射和过滤器,但似乎无法编写一组优雅的循环。任何建议或例子都是有帮助的。

行政主管:医疗保健:美国x5

行政主管:医疗保健:马来西亚x2

执行:财务:美国x1

金融健康:技术:马来西亚x3

财务健康:技术:美国x2

财政健康:能源:美国x1

行政=8

FinancialHealth =6

行政人员:卫生保健=7

执行人员:财务=1

财务健康:技术=5

财政健康:能源=1

行政主管:医疗保健:美国=5

等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-02 08:31:38

溪流在这里有很大的帮助,而且也不困难。我们需要在一条小溪里走三步:

代码语言:javascript
复制
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()))

因此,作为一个完整的例子:

代码语言:javascript
复制
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);

威尔输出

代码语言:javascript
复制
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=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50125968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档