作者:谜乱凡_134 | 来源:互联网 | 2023-01-07 18:07
1> Stop ongoing..:
您可以使用第一项作为键转换String[][]
为流String[]
,然后收集到地图,String[]
其余作为集合的值.
public static Map> groupingDishes2(String[][] dishes) {
return Arrays.stream(dishes)
.collect(Collectors.toMap(
arr -> arr[0],
arr -> Arrays.stream(arr).skip(1).collect(Collectors.toCollection(HashSet::new))));
}
顺便说一句,我怀疑你真的需要一个Map>
.将类型更改为更好Map>
,然后实现也可以更简单.
public static Map> groupingDishes(String[][] dishes) {
return Arrays.stream(dishes)
.collect(Collectors.toMap(
arr -> arr[0],
arr -> Arrays.stream(arr).skip(1).collect(Collectors.toSet())));
}
或者甚至更好,正如@Holger建议的那样,一个更好的选择,因为"带有skip
和limit
不能很好地执行的流,也Collectors
没有得到任何结果的初始容量提示":
public static Map> groupingDishes(String[][] dishes) {
return Arrays.stream(dishes)
.collect(Collectors.toMap(
arr -> arr[0],
arr -> new HashSet<>(Arrays.asList(arr).subList(1, arr.length))));
}
我的建议中没有中间数组.第一个建议从包含原始数组的*view*创建一个集合.第二个建议创建一个*包装*新数组的列表.这两种建议都比流操作更短,更有效.带有&#39;skip`和`limit`的流不能很好地执行,而且`Collector`s没有得到任何结果初始容量的提示.