Questions tagged «lambda»

不要使用AWS服务(对于这些问题,请使用[aws-lambda]!)Lambda是匿名函数或编程语言(例如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java)中的闭包。(也就是lambda表达式。)

5
Lambda的返回类型可以通过返回值来推断,那么为什么函数不能呢?
#include <iostream> int main(){ auto lambda = [] { return 7; }; std::cout << lambda() << '\n'; } 该程序编译并打印7。lambda 的返回类型根据返回值7推导为整数类型。 为什么普通功能无法做到这一点? #include <iostream> auto function(){ return 42; } int main(){ std::cout << function() << '\n'; } 错误:“函数”函数使用“自动”类型说明符,而没有尾随返回类型
75 c++  function  c++11  lambda  auto 

4
takeWhile()与Flatmap的工作方式不同
我正在用takeWhile创建片段,以探索其可能性。当与flatMap结合使用时,其行为与预期不符。请在下面找到代码片段。 String[][] strArray = {{"Sample1", "Sample2"}, {"Sample3", "Sample4", "Sample5"}}; Arrays.stream(strArray) .flatMap(indStream -> Arrays.stream(indStream)) .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4")) .forEach(ele -> System.out.println(ele)); 实际输出: Sample1 Sample2 Sample3 Sample5 预期输出: Sample1 Sample2 Sample3 期望的原因是takeWhile应该一直执行到内部条件变为真为止。我还在平面图中添加了打印输出语句以进行调试。流仅返回两次,这与期望一致。 但是,这在链中没有平面图的情况下也很好用。 String[] strArraySingle = {"Sample3", "Sample4", "Sample5"}; Arrays.stream(strArraySingle) .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4")) .forEach(ele -> System.out.println(ele)); 实际输出: Sample3 此处,实际输出与预期输出匹配。 免责声明:这些摘录仅用于代码实践,不能用于任何有效的用例。 更新: 错误JDK-8193856:该修补程序将作为JDK 10的一部分提供。更改将更正whileOps …

7
为什么flatMap()之后的filter()在Java流中不是“完全”惰性的?
我有以下示例代码: System.out.println( "Result: " + Stream.of(1, 2, 3) .filter(i -> { System.out.println(i); return true; }) .findFirst() .get() ); System.out.println("-----------"); System.out.println( "Result: " + Stream.of(1, 2, 3) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .filter(i -> { System.out.println(i); return true; …

6
C ++ 11 std :: set lambda比较函数
我想std::set用自定义比较功能创建一个。我可以使用来将其定义为类operator(),但是我想享受在其中使用lambda的能力,因此我决定在具有std::set作为成员的类的构造函数的初始化列表中定义lambda函数。但是我无法获得lambda的类型。在继续之前,这里有一个例子: class Foo { private: std::set<int, /*???*/> numbers; public: Foo () : numbers ([](int x, int y) { return x < y; }) { } }; 搜索后,我发现了两种解决方案:一种是使用std::function。只需将设置比较函数类型设置为be,std::function<bool (int, int)>然后像我一样完全传递lambda即可。第二种解决方案是编写一个make_set函数,例如std::make_pair。 解决方案1: class Foo { private: std::set<int, std::function<bool (int, int)> numbers; public: Foo () : numbers ([](int x, int y) { return …

4
C#7元组和Lambda
使用新的C#7元组语法,是否可以指定一个以元组为参数的lambda并在lambda中使用解压缩的值? 例: var list = new List<(int,int)>(); 在lambda中使用元组的正常方法: list.Select(value => value.Item1*2 + value.Item2/2); 我希望避免使用新糖.Item1 .Item2,例如: list.Select((x,y) => x*2 + y/2); 最后一行不起作用,因为它被视为lambda的两个参数。我不确定是否真的有办法。 编辑: 我在lambda定义((x,y)) => ...中尝试了双括号,但没有用:,也许尝试起来很愚蠢,但是双括号实际上在这里起作用: list.Add((1,2)); 另外,我的问题不是要避免使用丑陋的默认名称.Item .Item2,而是要在lambda中实际拆开元组(以及为什么不能实现或不可能)。如果您是来这里使用默认名称的解决方案,请阅读Sergey Berezovskiy的答案。 编辑2: 只是想到了一个更通用的用例:是否有可能(或为什么不这样做)“解构”传递给方法的元组?像这样: void Foo((int,int)(x,y)) { x+y; } 代替这个: void Foo((int x,int y) value) { value.x+value.y }
75 c#  lambda  tuples  c#-7.0 



2
使用Lambda的Java 8过滤器数组
我有一个double[],我想在一行中过滤掉负值(不创建新数组)而不添加for循环。使用Java 8 Lambda表达式是否可能? 在python中,将使用生成器: [i for i in x if i > 0] 是否可以在Java 8中做类似的简洁操作?
74 java  lambda  java-8 

16
为什么要使用lambda函数?
我可以找到很多东西,向我展示什么是lambda函数,以及语法如何工作以及什么不是。但是除了“凉爽因素”(我可以在中间调用另一个函数,整洁!)之外,我还没有看到任何令人信服的东西来说明为什么我真的需要/想要使用它们。 在我所看到的大多数示例中,这似乎更多是一种风格或结构选择。并且kinda打破了python规则中的“唯一正确的做事方式”。它如何使我的程序更正确,更可靠,更快或更易于理解?(我见过的大多数编码标准都倾向于告诉您避免在一行上写过分复杂的语句。如果这样更易于阅读,请将其分解。)
74 python  lambda 

6
是否有可用于任何lambda的no-op(NOP)的方法参考?
这听起来像是一个奇怪的问题,但是有一种方法可以引用Java 8中Lambda的标准no-op(aka空操作,空模式方法,无操作,无操作方法)方法。 目前,我有一个方法,需要一个,void foo(Consumer<Object>)并且想要不执行任何操作,我必须声明: foo(new Consumer<Object>() { public void accept(Object o) { // do nothing } } 我希望能够执行以下操作: foo(Object::null) 代替。是否存在类似的东西? 不确定如何使用多参数方法-也许这是Java中lambda的缺陷。

2
Lambda Java参考
我想将转换anonymous class为lambda expression。但是这个匿名类我使用this关键字。 例如,我写了这个简单的Observer/Observable模式: import java.util.ArrayList; import java.util.Collection; public static class Observable { private final Collection<Observer> notifiables = new ArrayList<>(); public Observable() { } public void addObserver(Observer notifiable) { notifiables.add(notifiable); } public void removeObserver(Observer notifiable) { notifiables.add(notifiable); } public void change() { notifiables.forEach(notifiable -> notifiable.changed(this)); } } public interface Observer …
73 java  lambda  java-8 

7
Java 8中“功能接口”的精确定义
最近,我开始探索Java 8,但我不太了解Java的lambda表达式实现所必需的“功能接口”的概念。Java中有关于lambda函数的相当全面的指南,但是我陷入了为功能接口的概念定义的章节中。定义如下: 更准确地说,功能接口定义为具有一种抽象方法的任何接口。 然后他继续进行示例,其中一个是Comparator接口: public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); } 我能够测试是否可以使用lambda函数代替Comparator参数,并且它可以工作(即Collections.sort(list, (a, b) -> a-b))。 但是在Comparator界面中,compare和equals方法都是抽象的,这意味着它具有两个抽象方法。那么,如果定义要求一个接口仅具有一个抽象方法,那么这将如何工作?我在这里想念什么?

5
Java8 Lambda和异常
我想知道是否有人可以向我解释以下怪异现象。我正在使用Java 8 Update 11。 给定这种方法 private <F,T> T runFun(Function<Optional<F>, T> fun, Optional<F> opt) { return fun.apply(opt) ; } 如果我首先构造一个函数Object,并将其传递给上面的方法,那么事情就会编译。 private void doesCompile() { Function<Optional<String>, String> fun = o -> o.orElseThrow(() -> new RuntimeException("nah")); runFun(fun, Optional.of("foo")); } 但是,如果我以lambda形式内联函数,则编译器会说 未报告的异常X; 必须被抓住或宣布被抛出 private void doesNotCompile () { runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), …
73 java  lambda  java-8 

2
Java 8和Java 9中的Stream.peek()方法
我正在学习Java 8 lambda表达式,并且想问一下下面的Java代码,这些代码与peek我遇到的函数接口中的方法有关。 在IDE上执行程序时,它不提供任何输出。我期望它会给2, 4, 6。 import java.util.Arrays; import java.util.List; public class Test_Q3 { public Test_Q3() { } public static void main(String[] args) { List<Integer> values = Arrays.asList(1, 2, 3); values.stream() .map(n -> n * 2) .peek(System.out::print) .count(); } }
73 java  lambda  java-8  java-9  peek 

15
实体框架-无法将lambda表达式转换为“字符串”类型,因为它不是委托类型
我在基于C#的代码中使用Entity Framework。我遇到了意外的怪异,正在寻找建议。 案例1、2、3、4 ...项目: RivWorks.dll RivWorks.Service.dll RivWorks.Alpha.dll 样本(所有这些工作): RivWorks.Alpha.dll: public static bool EndNegotitation(long ProductID) { var product = (from a in _dbFeed.AutoWithImage where a.AutoID == ProductID select a).FirstOrDefault(); ... } RivWorks.Service.dll public static RivWorks.Model.NegotiationAutos.AutoWithImage GetProductById(long productId) { var myProduct = from a in _dbFeed.AutoWithImage where a.AutoID == productId select a; …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.