java - 我怎样才能避免内循环
问题描述
如何避免内部循环并仅使用流功能编写此“分配”?
编辑:我想要一个链接在一起的所有唯一对的列表,存储在l2
. 示例:输入:String[] l = { "a", "a", "b", "c", "d", "d", "d", "d", "a", "a", "b", "b", "c", "d" };
,输出:[a, a, b, c, d, d, b, b, c, d]
。
String[] l = { "a", "a", "b", "c", "d", "d", "d", "d", "a", "a" };
String[] l2 =
IntStream.iterate(0, i -> i < l.length, i -> i + 2)
.mapToObj(i -> Objects.hash(l[i], l[i + 1]))
.distinct()
.map(h -> {
for (int j = 0; j < l.length; j += 2) {
if (h == Objects.hash(l[j], l[j + 1])) {
return new String[] { l[j], l[j + 1] };
}
}
return null;
})
.flatMap(Arrays::stream)
.toArray(String[]::new);
System.out.println(Arrays.toString(l2));
解决方案
我不完全确定您的循环试图实现什么。Jason 的循环查找所有唯一字符,但看起来您正在寻找所有唯一字符串对,然后将其展平。您使用“Objects.hash()”来消除重复对是不正确的,两对可能不同但具有相同的哈希,所以杰森摆脱它是正确的。如果你真的想要一个连接在一起的唯一对列表,这可能会起作用:
IntStream.range(0, l.length / 2)
.mapToObj(i -> List.of(l[i * 2], l[i * 2 + 1]))
.distinct()
.flatMap(List::stream)
.toArray(String[]::new);
推荐阅读
- css - 找不到字体:React-slick + nextjs
- c - 如何提高以下代码的性能?
- c++ - 了解 tagVARIANT 结构
- dataframe - Spark Dataframe - 如何根据 ID 和日期仅保留每个组的最新记录?
- python - 如何正确使用带有 level 和 axis 参数的 pandas sort_index?
- php - 从搜索控制器中删除所需的属性 - 非对象的属性
- gcc - 如何使用 MinGW 访问 c 代码中的链接器符号?
- google-apps-script - 在 Google Sheet/Google App Script 中,当我编辑一个单元格时,我想在另一个单元格上调用函数,但不工作
- mysql - mysql insert into 不工作,但 select 不工作
- r - ggplot 到 ggplotly 不适用于自定义 geom_boxplot 宽度