在Java 8中,Stream.map()和Stream.flatMap()方法有什么区别?
我一直在检查即将到来的Java update,即:Java 8 or JDK 8.是的,我很不耐烦,有很多新东西,但是,有一些我不明白的东西,一些简单的代码:
final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
stream.flatMap();
Run Code Online (Sandbox Code Playgroud)
javadoc是
public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)返回一个流,该流包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果.每个映射的流在其内容放入此流后关闭.(如果映射的流为空,则使用空流.)这是一个中间操作.
如果有人创建了一些简单的现实生活示例flatMap,如何在以前的java版本Java[6,7]中编写代码以及如何使用相同的例程编写代码,我将不胜感激Java 8.
给定未知数量的列表,每个列表具有未知长度,我需要生成具有所有可能的唯一组合的单个列表.例如,给出以下列表:
X: [A, B, C]
Y: [W, X, Y, Z]
Run Code Online (Sandbox Code Playgroud)
然后我应该能够生成12种组合:
[AW, AX, AY, AZ, BW, BX, BY, BZ, CW, CX, CY, CZ]
Run Code Online (Sandbox Code Playgroud)
如果添加了3个元素的第三个列表,我将有36个组合,依此类推.
关于如何用Java做到这一点的任何想法?
(伪代码也可以)
我有以下集合类型:
Map<String, Collection<String>> map;
Run Code Online (Sandbox Code Playgroud)
我想map.size()从每个Key的集合中的单个值创建每个组的唯一组合.
例如,假设地图如下所示:
A, {a1, a2, a3, ..., an}
B, {b1, b2, b3, ..., bn}
C, {c1, c2, c3, ..., cn}
Run Code Online (Sandbox Code Playgroud)
我希望获得的List<Set<String>>结果是一个结果,看起来类似于(排序并不重要,它只需要是一个由所有可能的组合组成的'完整'结果):
{a1, b1, c1},
{a1, b1, c2},
{a1, b1, c3},
{a1, b2, c1},
{a1, b2, c2},
{a1, b2, c3},
...
{a2, b1, c1},
{a2, b1, c2},
...
{a3, b1, c1},
{a3, b1, c2},
...
{an, bn, cn}
Run Code Online (Sandbox Code Playgroud)
这基本上是一个计数问题,但我想看看是否可以使用Java 8流解决方案.
我有两个数组:
String[] operators = {"+", "-", "*"};
int[] numbers = {48, 24, 12, 6};
Run Code Online (Sandbox Code Playgroud)
我希望以这样的String格式获得所有可能的组合:
48+24+12+6
48+24+12-6
48+24+12*6
48+24-12+6
48+24-12-6
48+24-12*6
..........
48*24*12*6
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
for(int i = 0; i < operators.length; i++) {
System.out.println(numbers[0] + operators[i] + numbers[1] + operators[i] + numbers[2] + operators[i] + numbers[3]);
}
Run Code Online (Sandbox Code Playgroud)
但它只打印:
48+24+12+6
48-24-12-6
48*24*12*6
Run Code Online (Sandbox Code Playgroud)
怎么解决这个?
这不是重复,因为我不想获得每两对数据,我希望得到4对中的每个组合.副本不同.
我想知道double[][]使用流的多个2 阵列矩阵最紧凑和有效的方法.该方法应遵循此处所示的矩阵乘法规则:http:
//www.mathwarehouse.com/algebra/matrix/multiply-matrix.php
这是使用for循环的一种方法('this'是第一个矩阵'):
final int nRows = this.getRowDimension();
final int nCols = m.getColumnDimension();
final int nSum = this.getColumnDimension();
final double[][] outData = new double[nRows][nCols];
// Will hold a column of "m".
final double[] mCol = new double[nSum];
final double[][] mData = m.data;
// Multiply.
for (int col = 0; col < nCols; col++) {
// Copy all elements of column "col" of "m" so that
// will be in contiguous memory.
for (int mRow = …Run Code Online (Sandbox Code Playgroud)