我想确定一个列表是否是字谜,或者是否使用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数组的流,这也会有所帮助。
不是创建和排序char[]
或int[]
(这不能内联完成,因此会“中断”流),而是在字符串中获取chars
的stream
,并在将它们转换为数组之前对其进行排序,而不是创建和排序char[]
或int[]
。但是请注意,这是一个intsteam
,string.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有一种惯用的方法。我提出的不优雅的替代方法是: