在Java 8中,Stream.map()和Stream.flatMap()方法有什么区别?
我有两个数字列表,我想找到所有可能的数字对.例如,给定列表[1,2,3]和[3,4],结果应该是[(1,3),(1,4),(2,3),(2,4),(3) ,3),(3,4)].
我知道我可以使用for循环来做到这一点,但有没有更简洁的方法来使用Java 8流?
我试过以下但是我错过了一些东西,因为我得到了List<Stream<int[]>>而不是List<int[]>.
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(3, 4);
List<int[]> pairs = list1.stream().map(i -> list2.stream().map(j -> new int[] { i, j }))
.collect(Collectors.toList());
pairs.forEach(i -> {
System.out.println("{" + i[0]+ "," + i[1]+ "}");
});
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法将一个对象的多个属性组合成一个String列表.在我的案例中,我有一个名为"debitCardVO"的对象,我希望它从对象转换为List
这是我的代码片段:
for (DebitCardVO debitCardVO : debitCardVOList) {
List<String> debitCardList = debitCardVOList.stream()
.map(DebitCardVO::getCardBranchCode,DebitCardVO::getAccountNo)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合.
我想迭代最深的对象并将相同的代码应用于它.
必要的方法是微不足道的,但有没有办法让这一切变得简单?
以下是代码今天的样子:
My object o;
SecretType computedThingy = 78;
for (FirstLevelOfCollection coll : o.getList()) {
for (SecondLevelOfCollection colColl : coll.getSet()) {
for (MyCoolTinyObjects mcto : colColl.getFoo()) {
mcto.setSecretValue(computedThingy);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到如何从最深的循环中创建一个lambda:
colColl.getFoo().stream().forEach(x -> x.setSecretValue(computedThingy)
Run Code Online (Sandbox Code Playgroud)
但我可以做更多吗?
我想在指定年份之间的一年中在 Quarter 上做一个笛卡尔积
Year(2105, 2016) 应该返回 Quarter(2015, Q1), Quarter(2015, Q2)... Quarter(2016, Q4)
代表季度的枚举将是
public enum Quarters {
Q1, Q2, Q3, Q4
}
Run Code Online (Sandbox Code Playgroud)
我试图想出的代码卡在下面
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.map(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
);
Run Code Online (Sandbox Code Playgroud)
上面的代码返回Stream<Stream<Quarter>>,我需要扁平化为Stream<Quarter>任何帮助表示赞赏。
我有Stream<SortedSet<String>>,而且我只想拥有一个Stream<String>. 我尝试使用flatMap()但它没有用,因为它不能平面 Sortedset 流。
String productName = "p1";
Set<Product> products = new HashSet<>();
products.add(new Product(productName));
Stream<SortedSet<String>> sortedSetStream = products.stream().map(p -> Util.getProductNames(p) );
Run Code Online (Sandbox Code Playgroud)