如何使用java流根据给定的字符串输入查找字母大小写的所有差异?
巩固我对java流的理解。我正在用java流解决leetcode的简单问题。我对如何使用流解决回溯问题感到困惑。我特别搞不懂如何两次Map一个字符(小写和大写)。
Input: S = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]
Stream.of(S.split(""))
.map(str -> str.toUpperCase()) // this will upper case only
.map(str -> str.toLowerCase()) // this will lower case only. how to use both?
.collect(Collectors.toList()); //how do i concatenate strings before adding into list
为糟糕的英语提前道歉
2条答案
按热度按时间b5lpy0ml1#
你可以用flatmap来实现,但是你的输出是
["a", "A", "1", "b", "B", "2"]
这和你想要的完全不同。请注意,您的输出会很快变大;对于输入中的每个字母,输出的#将加倍。这与streams所做的并不匹配。一般来说,你想在这里做什么是不可能的,或者需要弯曲工具,就像用锤子在三明治上涂黄油一样。你也许可以,但你为什么要这么做?这不会提高你使用锤子的技能。
fcwjkofz2#
正如rzwitserloot所说,这类问题通常不会使用流攻击,但是我将尝试解决您在问题中的疑问:
对于包含字母大小写版本的流,您可以使用以下内容:
如果要在Map流中的值之后连接列表中的字符串,而不是使用
Collectors.toList()
你可以用Collectors.joining()
这样地:现在对于所讨论的问题,您不需要字母的大小写版本,只需从输入单词中筛选字母,并开始用大写版本的1替换单词中的字母,这可能是一个可行的解决方案: