java - java - 如何使用Java中的流比较和操作一个列表中的两个相邻元素?
问题描述
背景是我有两个字符串类型变量 str1 和 str2 作为输入。最后,我必须返回一个列表,其中包含 str1 的连续前缀,该前缀小于 str2 中的相关前缀。
我有这样的Java代码:
public List<Character> getPrefix(String str1, String str2) {
int index = 0;
List<Character> res = new ArrayList<>();
//str1 = "1243"
//str2 = "2324"
// The answer will be "12".
while (index < str1.length() && index < str2.length() && str1.charAt(index) <= str2.charAt(index)) {
res.add(str1.charAt(index));
index++;
}
return res;
}
//the return type could either be List<String> or List<Character>
我被要求在流中转换此代码而不使用 while 或 for 循环,只是在流方法中。我打算像这样转换这段代码
List<String> list = new ArrayList<>();
list.add(str1);
list.add(str2);
List<String> res = list.stream()
.filter()
.reduce();
我发现filter()
方法可以选择与给定谓词匹配的元素,并且reduce()
方法可以使用标识和累加器来获得一个最终结果。
但是我发现我既没有办法操作一个列表中的两个相邻元素,也没有办法获得一个指针来比较和遍历列表中每个元素中的每个字符(该元素是字符串类型)。
那么有什么方法可以操作一个列表中的两个相邻元素,以便我可以比较它们在同一位置的字符。
解决方案
你可以:
- 生成索引流
- 使用索引获取两个字符串的字符
有效时选择字符
// The magic public static List<Character> getPrefix(String str1, String str2) { return IntStream .range(0, Math.min(str1.length(), str2.length())) .mapToObj(i -> new char[] { str1.charAt(i), str2.charAt(i) }) .takeWhile(a -> a[0] < a[1]) .map(a -> a[0]) .collect(Collectors.toList()); }
推荐阅读
- r - 运行具有不同协变量、结果变量和固定效应的回归模型的函数
- json - 使用 REST API 过滤数据错误:“可观察类型上不存在属性‘过滤器’
’。” - sql-server - FileBeat 能否将数据从 MSSQL 数据库传送到 Elastic Cloud?(用于网站上的搜索功能)
- google-cloud-platform - Google Calendar API 如何创建自动生成的 Event ID?
- django - 带有逗号分隔的 UUID Django 的 GET 端点
- python - django 模型中 settings.AUTH_USER_MODEL 的匿名用户
- python-3.x - 为什么 Celery 5 需要 djcelery?
- javascript - 类中嵌套函数之间的对象上下文('this')
- mysql - Nodejs多个具有动态属性的行的多条sql更新?
- scala - Scala - 在父类中引用子类(泛型)