当前位置: 首页 > 知识库问答 >
问题:

如何在Java 8中查找字数

陈瀚玥
2023-03-14

我有下面的句子

Hello world Hello Stackoverflow

预期输出:(不考虑订单)

{2=[Hello], 1=[world,Stackoverflow]}

使用以下代码进行了尝试:

        final String input = "Hello world Hello Stackoverflow";

        final Map<String, Long> output = Arrays.stream(input.split(" "))
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

        System.out.println(output);

得到以下输出:

{world=1, Hello=2, Stackoverflow=1}

我想得到Long作为键和List

如何做到这一点?


共有3个答案

柳和怡
2023-03-14

有可能在单流中做吗?

不完全是(或者可能没有那么有效)。你需要有每个单词的频率作为密钥使用。在地图构建过程中不断更新密钥充满了问题。你还需要更新列表。

但是,下面的程序做了完全相同的事情,但是没有流。所以它可能会更有效一点。您可以使用刚刚创建的地图作为源。

  • 创建目标地图。
  • 遍历entrySet
  • computeIfAbsen将在键不存在时创建列表。
  • 它还返回刚刚创建或现有的值,在本例中为列表,因此您可以添加单词。
Map<Long, List<String>> result = new HashMap<>();
for (Entry<String,Long> e : output.entrySet()) {
    result.computeIfAbsent(e.getValue(), v->new ArrayList<>())
            .add(e.getKey());
}

result.entrySet().forEach(System.out::println);

打印

1=[world, Stackoverflow]
2=[Hello]
滕成双
2023-03-14

使用集合的另一种方法。频率和映射

final String input = "Hello world Hello Stackoverflow";
List<String> list  = Arrays.stream(input.split(" ")).collect(Collectors.toList());

final Map<Long, Set<String>> output = list.stream()
        .collect(Collectors.groupingBy(
                    str -> (long) Collections.frequency(list, str), Collectors.toSet()));
冀望
2023-03-14

您需要按如下方式对地图条目进行分组:

String input = "Hello world Hello Stackoverflow";

Map<Long, List<String>> output = Arrays.stream(input.split(" "))
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    .entrySet() // Set<Entry<String, Long>>
    .stream() // Stream<Entry<String, Long>>
    .collect(Collectors.groupingBy(
      Map.Entry::getValue, 
      Collectors.mapping(Map.Entry::getKey, Collectors.toList())
    ));

System.out.println(output); // {1=[world, Stackoverflow], 2=[Hello]}
 类似资料:
  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 问题内容: 假设我的数据库表中有一个名为“ code”的列,其中包含字符串数据类型。 我想要一个查询,该查询将返回所有带有’code’值的行,该值是给定搜索字符串的子字符串,并且附加条件是该子字符串出现在搜索字符串的末尾。 例如,如果搜索字符串为“ 12345”,则查询应返回“代码”值为 12345 2345 345 45 5的所有行。 问题答案: 只需使用like运算符即可:

  • 问题内容: 我有一个特定的字符串,例如“ 123abcd”,但我不知道表的名称,甚至不知道SQL Server数据库中表内的列的名称。我想通过选择找到它并显示相关字符串的所有列,所以我想知道以下内容: 出于显而易见的原因,它不起作用,但是有一种简单的方法可以创建一个select语句来执行类似的操作? 问题答案: 这将起作用: 不过,有几点警告。首先, 这是极其缓慢且未优化的 。所有值都将被简单地转

  • 问题内容: 如何在java中查找String中的重复字符? 问题答案: 创建一个 HashMap ,字符串的字符将作为键插入,其计数作为值插入。 如果 HashMap 已经包含字符,则将其计数加 1,否则将字符放入 HashMap。 如果 Char 的值大于 1,则表示它是该 String 中的重复字符。 Java程序在字符串中查找重复字符 当你运行上面的程序时,你会得到以下输出:

  • 问题内容: 在我的雪花数据库中,一个表具有非utf8字符。我如何在它上面创建仅包含utf8字符的视图;通过排除非utf8字符的行还是替换它们?谢谢 问题答案: 应该可以使用以下测试来检查非utf: 但是那时我没有数据可以测试。 要将字符串重新编码为utf-8,可以使用JavaScript函数:

  • 问题内容: 我只是在练习一些MIT Java作业。但是,我不确定如何找到第二大数字。http://ocw.csail.mit.edu/f/13 问题答案: 仅对数组进行排序以查找订单统计信息太浪费了。您可以通过遵循与现有算法相似的算法找到第二大元素,并使用一个代表第二大数字的附加变量。 当前,下一个元素可以大于最大值或等于/小于最大值,因此单个元素就足够了: 考虑两个变量,下一个元素可能是 大于最