如何使用 java Lambdas 获取数组的乘积。我知道在 C# 中它是这样的:
result = array.Aggregate((a, b) => b * a);
编辑:使问题更清楚。
我希望将 a 转换Collection<Placement>为Map<String, Collection<String>>使用 java 流,其中Placement类如下
public class Placement {
private String id;
/* Links two placements, may be same for atleast 2 placements. */
private String futureLinkId;
}
Run Code Online (Sandbox Code Playgroud)
地图的键是未来链接 id,值是放置 id。例如,如果有 2 个展示位置
p1 { id=1, futureLinkId=f1 }, p2 { id=2, futureLinkId=f1 },则输出应为Map { f1 - { id1, id2 } }
数组长度是否有优雅的 lambda?类似于方法引用的东西,而不是方法?Arraylength更像是一个公共的 final 字段。
从一个锯齿状的二维数组 ( Object[][]) 我想找到最长的内部数组。这很容易:
OptionalInt width = Stream.of(myJaggedArray).mapToInt(line -> line.length).max();
Run Code Online (Sandbox Code Playgroud)
我只是想知道当我找不到比line -> line.length. 我原以为Object[]::length可能会起作用,但它给出了“类型 Object[] 没有定义适用于此处的长度(Object[])”。我在网上搜索过,但没有找到替代方法。
我可以用我所拥有的快乐生活。也许这只是由不是来自方法的长度引起的数组的特殊之处。认为值得一问。
我是 C# linq 新手。
我的数据结果如下,
Id | Name | Code
1 | Go | GOS
1 | RES | RECSO
1 | ICS | ICSO
2 | Go | GOS
2 | ICS | ICSO
Run Code Online (Sandbox Code Playgroud)
我想要的结果如下,
Id | Name | Code
1, Go,RES,ICS | GOS,RECSO,ICSO
2, Go,ICS | GOS,ICSO
Run Code Online (Sandbox Code Playgroud)
有人可以用优化的方式为此提供 linq 查询吗,因为我有大数据集。
提前致谢
从cpp参考:https : //en.cppreference.com/w/cpp/language/if,看来我不能做到这一点:
if (cond)
{}
else if (init; cond) // <<--- init not allowed with "else if"
{}
Run Code Online (Sandbox Code Playgroud)
我以一种相当愚蠢的方式解决了它:
if (cond)
{}
else if ([]() -> bool
{
init;
if (cond)
{
// Do something in the same scope as 'init'
return true;
}
return false;
}())
{}
Run Code Online (Sandbox Code Playgroud)
我是否在这里缺少有关使用C ++ 17“正确”执行此操作的明显方法?
显然我不擅长 Java 8。有人能告诉我为什么我的集合在迭代过程中没有保留我的所有值吗?如果我放置一个断点,代码会迭代但只返回最后一个值。
Set<Group> groups = new Hashset<>();
Group group = new Group();
List my = model.getValues();
list.stream().forEach(gr -> {
group.setName(gr.getDescription());
group.setDescription(gr.getDescription());
groups.add(group);
});
System.Out.Println(groups);
Run Code Online (Sandbox Code Playgroud) 我有一个产品,我想用相同的原始顺序在另一个数组中填充产品,我使用了并行流,结果没有按原始顺序排序
List<Product> products = productList.getProducts();
List<ProductModelDTOV2> productModelDTOV2s = new ArrayList<>();
products.parallelStream().forEach(p -> {
try {
ProductModelDTOV2 ProductModelDTOV2 = dtoFactoryV2.populate(p, summary);
productModelDTOV2s.add(ProductModelDTOV2);
} catch (GenericException e) {
log.debug(String.format("Unable to populate Product %s", p));
}
});
return productModelDTOV2s;
Run Code Online (Sandbox Code Playgroud) 我正在浏览 Java 8 Feature 并使用 Jshell 来探索它。我尝试运行以下命令:
Consumer<String> consumer = (str)->System.out::println;
Run Code Online (Sandbox Code Playgroud)
但它失败并出现以下错误:
Error:
| incompatible types: bad return type in lambda expression
| void is not a functional interface
Run Code Online (Sandbox Code Playgroud)
我不明白到底是什么问题 Consumer 接受一个论点而什么都不返回。我在这里通过传递 1 arg str 和打印来做同样的事情。那么这个语法有什么问题。
谢谢,
我正在尝试使用lambda函数计算列表中给定 val 的总出现次数:
def countOccurrence(givenList, val):
result = sum(1 for i in range(len(givenList)) if lambda i: givenList(i) == val)
return result
givenList = [3, 4, 5, 8, 0, 3, 8, 5, 0, 3, 1, 5, 2, 3, 4, 2]
print(countOccurrence(givenList, 5))
Run Code Online (Sandbox Code Playgroud)
但是返回的结果是16,它只不过是列表的长度。