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

确定Java8中由字谜元素组成的列表

锺高翰
2023-03-14

我想确定一个列表是否是字谜,或者是否使用Java8。

示例输入:

"cat", "cta", "act", "atc", "tac", "tca"

我已经编写了以下函数来完成这项工作,但我想知道是否有一个更好和优雅的方法来做到这一点。

boolean isAnagram(String[] list) {
    long count = Stream.of(list)
            .map(String::toCharArray)
            .map(arr -> {
                Arrays.sort(arr);
                return arr;
            })
            .map(String::valueOf)
            .distinct()
            .count();
    return count == 1;

}

似乎我不能用stream.sorted()方法对char数组排序,所以我使用了第二个map运算符。如果有某种方法,我可以直接操作char流,而不是char数组的流,这也会有所帮助。

共有1个答案

赵俊远
2023-03-14

不是创建和排序char[]int[](这不能内联完成,因此会“中断”流),而是在字符串中获取charsstream,并在将它们转换为数组之前对其进行排序,而不是创建和排序char[]int[]。但是请注意,这是一个intsteamstring.valueOf(int[])将包括数组的内存地址,这在这里不是很有用,因此在本例中最好使用arrays.tostring

boolean anagrams = Stream.of(words)
        .map(String::chars).map(IntStream::sorted)
        .map(IntStream::toArray).map(Arrays::toString)
        .distinct().count() == 1;

当然,您也可以使用map(s->arrays.tostring(s.chars().sorted().toArray()))代替四个maps系列。不确定速度是否有(显著)差异,这可能主要是口味的问题。

此外,可以使用intBuffer.wrap使数组具有可比性,这应该比arrays.tostring快得多(多亏了注释中的Holger)。

boolean anagrams = Stream.of(words)
        .map(s -> IntBuffer.wrap(s.chars().sorted().toArray()))
        .distinct().count() == 1;
 类似资料:
  • 如何列出字符数组中指定的任何字母的所有大小写排列?假设我有一个这样的字符数组:['h','e','l','l','o',我想打印出字母“l”的可能组合,这样它就可以打印出来[你好,你好,你好,你好]。 这是我到目前为止所拥有的(唯一的问题是我可以打印排列,但是我不能在实际单词中打印它们。所以我的代码打印[ll, lL, Ll, LL]而不是上面的示例。 我的代码:

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 本文向大家介绍从Python中的元组列表中找到包含给定元素的元组,包括了从Python中的元组列表中找到包含给定元素的元组的使用技巧和注意事项,需要的朋友参考一下 列表可以将元组作为其元素。在本文中,我们将学习如何识别包含特定搜索元素(字符串)的元组。 有条件 我们可以根据情况设计跟踪。之后,我们可以提及条件或条件组合。 示例 输出结果 运行上面的代码给我们以下结果- 带过滤器 我们将过滤器功能与

  • 我有客户对象的列表。我想迭代列表并按1递增顺序。 我尝试了每个列表,但在这里我必须创建新列表并在其中添加值。 有没有更好的方法?我尝试使用streams,但它只是映射订单

  • 我有一个有点奇怪的问题。 我有一个“word”对象列表。“word”对象包含一个字符串myCWord,它等于传入word的字符串的规范版本。 规范形式是字符串中的排序字符。 现在我有了一个单词列表,在这里我可以访问它们所包含的字符串的规范版本。 我需要一个算法来创建“子列表”,这些列表包含一组单词,这些单词是每个单词的字谜。

  • 我有一个由两个元素组成的列表,就像通过得到的那样,我想把它们变成一个散列(在本例中,通过。我可以“手工”完成它,但这并不太优雅,我相信Raku有一种惯用的方法。我提出的不优雅的替代方法是: