function cartesianProduct(arr) {
return arr.reduce(function(a,b) {
return a.map(function(x) {
return b.map(function(y) {
return x.concat(y);
});
}).reduce(function(a,b) { return a.concat(b); }, []);
}, [[]]);
}
var data = [[['D']], [['E'],['L','M','N']]];
cartesianproduct(data)
的结果将是二维数组:
[['D','E'], ['D','L','M','N']]
我试图做的是使用流在Java中编写这个笛卡尔乘积函数。
到目前为止,我有以下Java版本:
public Collection<Collection<String>> cartesianProduct(Collection<Collection<Collection<String>>> arr) {
return arr.stream().reduce(new ArrayList<Collection<String>>(), (a, b) -> {
return a.stream().map(x -> {
return b.stream().map(y -> {
return Stream.concat(x.stream(), y.stream());
});
}).reduce(new ArrayList<String>(), (c, d) -> {
return Stream.concat(c, d);
});
});
}
我对问题的猜测是:
stream.concat
之后)这是可能的,只要有一点函数编程的魔力。以下是接受集合
并生成流
的方法:
static <T> Stream<Collection<T>> cartesianProduct(Collection<Collection<Collection<T>>> arr)
{
return arr.stream()
.<Supplier<Stream<Collection<T>>>> map(c -> c::stream)
.reduce((s1, s2) -> () -> s1.get().flatMap(
a -> s2.get().map(b -> Stream.concat(a.stream(), b.stream())
.collect(Collectors.toList()))))
.orElseGet(() -> () -> Stream.<Collection<T>>of(Collections.emptyList()))
.get();
}
用法示例:
cartesianProduct(
Arrays.asList(Arrays.asList(Arrays.asList("D")),
Arrays.asList(Arrays.asList("E"), Arrays.asList("L", "M", "N"))))
.forEach(System.out::println);
输出:
[D, E]
[D, L, M, N]
我正在尝试对一个后端服务器进行负载测试,并将一些配置解析到一个标签对象中。我正在尝试生成< code>Label对象的笛卡尔乘积,这将是一个< code>Metric对象。 我有一个 方法添加 我试图以迭代/递归的方式做到这一点,但它变得非常复杂和混乱。我检查了是否有java8替代方案。如果我能够获得
本文向大家介绍map reduce实现笛卡尔乘积?相关面试题,主要包含被问及map reduce实现笛卡尔乘积?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在Map阶段,将来自矩阵A的元素标识成l条<key,value>的形式,key=(i,k),k=1,2,…,l。value=(j,)。将来自矩阵B的元素标识成l条<key,value>的形式,key=(i,k),k=1,2,…,m。
问题内容: 我想创建一个方法,该方法创建元素流,这些元素流是多个给定流的笛卡尔积(由二元运算符最后汇总为相同类型)。请注意,参数和结果都是流, 而不是 集合。 例如,对于 {A,B} 和 {X,Y}的 两个流,我希望它产生值 {AX,AY,BX,BY}的流 (简单串联用于聚集字符串)。到目前为止,我想出了以下代码: 这是我想要的用例: 预期结果:。 另一个例子: 预期结果:。 但是,如果我运行代码
我有如下地图: 我想得到如下数据: 我尝试了如下: 但这不是我想要的代码,因为地图数据是动态的和不可预知的。 所以我应该像下面这样得到地图数据,但不能像我想要的那样:
例如,对于{A,B}和{X,Y}这两个流,我希望它生成值流{AX,AY,BX,BY}(简单的串联用于聚合字符串)。到目前为止,我已经想出了这段代码: 这是我想要的用例: 预期结果:。 溪流消耗在哪里?按平面地图?很容易修好吗?
问题内容: 我具有以下集合类型: 我想为每个Key从集合中的单个值创建每个的唯一组合。 例如,假设地图如下所示: 我想得到的结果看起来像是一个结果(排序并不重要,它只需要是由所有可能的组合组成的“完整”结果)即可: 这基本上是一个计数问题,但是我想看看使用Java 8流是否可以解决。 问题答案: 您可以使用递归链解决此问题。 首先,当我们需要在映射值之间来回移动时,最好将它们复制到(这不是深度复制