天道酬勤,学无止境

lambda

destructuring in lambda function returns unexpected value

问题 当函数与解构一起使用时返回正确的预期值: [{"k":"key1","v":"val1"},{"k":"key2","v":"val2"},{"k":"key3","v":"val3"}] console.log(JSON.stringify([{ k: 'key1', v: 'val1', z: 'z1' }, { k: 'key2', v: 'val2', z: 'z2' }, { k: 'key3', v: 'val3', z: 'z3' }].map(function(x) { let {k, v} = x; return {k, v }; }))); 但是,当 lambda 函数与解构一起使用时,返回的值不正确: [{"k":"key1","v":"val1","z":"z1"},{"k":"key2","v":"val2","z":"z2"},{"k":"key3","v":"val3","z":"z3"}] console.log(JSON.stringify([{ k: 'key1', v: 'val1', z: 'z1' }, { k: 'key2', v: 'val2', z: 'z2' }, { k: 'key3', v: 'val3', z: 'z3' }].map(x => ({k, v} = x) ))); 我将如何在 lambdas

2022-05-17 04:27:03    分类:技术分享    javascript   lambda   destructuring

How to make a Predicate from a custom list of Predicates in Java?

问题 public class Tester { private static ArrayList<Predicate<String>> testerList; //some Predicates of type String here... public static void addPredicate(Predicate<String> newPredicate) { if (testerList == null) {testerList = new ArrayList<Predicate<String>>();} testerList.add(newPredicate); } public static Predicate<String> customTesters () { return s -> testerList.stream().allMatch(t -> t.test(s)); } } 回答1 你可以有一个静态方法来接收许多谓词并返回你想要的谓词: public static <T> Predicate<T> and(Predicate<T>... predicates) { // TODO Handle case when argument is null or empty or has only one element return s -> Arrays

2022-05-17 02:32:09    分类:技术分享    java   lambda   java-8   java-stream   predicate

Collectors.toMap with Supplier argument

问题 我无法理解,也无法找到带有 Supplied 参数的 Collectors.toMap 方法的合适示例; 这个。 我完全理解其他方法,具有创建键、值、处理重复项的二进制事物的功能,我只是不理解最后一个具有额外供应商参数的方法。 回答1 这是一个例子: Arrays.asList(1, 2, 3).stream() .collect(Collectors.toMap(i -> i, i -> i, (i, j) -> i, HashMap::new)); 在此示例中, Supplier<M> mapSupplier是HashMap::new ,这是一个能够创建空Map的工厂。 回答2 您提到的方法可以让您同时决定: 具体的地图实现(例如HashMap 、 ConcurrentHasMap等) 该实现的具体实例(您可以传递新创建的实例或很久以前在应用程序堆上创建的某个实例) 与此方法相反,在其他 2 个重载版本中,map 的实现将由库选择,并创建它的新实例。

2022-05-16 20:58:16    分类:技术分享    java   lambda

Is there anything wrong with using lambda for winforms event?

问题 comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); campaignDataGridView.MouseEnter += (a, b) => campaignDataGridView.Focus(); 回答1 这是完全可以接受的,但是,因为这些是匿名委托,所以无法取消订阅事件处理程序。 那是: // Subscribe lambda as event handler comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); // Try to unsubscribe a _different_ lambda with identical syntax. // The first lambda is still subscribed comboBox1.MouseEnter -= (a, b) => comboBox1.Focus(); 这是否是一个问题取决于您的应用程序和使用。 回答2 没事; 唯一微妙的一点是您是否需要取消订阅; 那么您也需要在本地存储委托: EventHandler handler = (s,a) => ... obj.SomeEvent += handler; ... obj.SomeEvent -= handler; 请注意,如果我不使用任何一个参数

2022-05-16 18:44:03    分类:技术分享    c#   lambda

Convert Expression<Func<T, U>> to Expression<Func<object, object>>

问题 我有一个LambdaExpression ,它的类型是Expression<Func<T, string>> 。 目前的代码设计不允许我保留T这意味着我被迫使用较慢的DynamicInvoke而不是Invoke 。 因为我知道T的类型,所以我想转换表达式以使其接受T对象,从而允许我使用Invoke 。 如何? 这是一个好的开始 class Program { class MyClass { public string MyProperty => "Foo"; } static LambdaExpression GetExpression(Expression<Func<MyClass, object>> expr) { return expr; } static void Main(string[] args) { var e1 = GetExpression(t => t.MyProperty); var e2 = Expression.Lambda<Func<object, object>>(e1, e1.Parameters); object myClass = new MyClass(); string s1 = (string)e1.Compile().DynamicInvoke(myClass); object s2 = e2.Compile().Invoke

2022-05-16 16:23:04    分类:技术分享    c#   lambda   expression-trees

Java 8 stream's toArray and size parameter

问题 我想知道 stream().toArray[x -> new Integer[x]] 如何知道数组的大小? 我写了一个片段,在其中我创建了一个大小为 4 的整数列表并过滤了值,它创建了一个过滤流长度的数组,我在流上看不到任何方法来获取流的大小。 List<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); intList.add(3); intList.add(4); Integer[] array = intList.stream() .filter(x -> x > 2) .toArray(x -> { System.out.println("x --> " + x); return new Integer[x]; }); System.out.println("array length: " + array.length); 上述代码的输出: x --> 2 array length: 2 最初,片段就像 Integer[] array = intList.stream() .filter(x -> x > 2) .toArray(x -> new Integer[x]); 只是为了了解它传递的 x 的值,我必须将其更改为在 lambda 中打印 x 回答1 回答2

2022-05-16 03:28:39    分类:技术分享    java   lambda   java-8   java-stream

How to build this complex Expression Func?

问题 我目前正在一个有这个数据库对象的EF网站上工作: public partial class Association { public Association() { this.Users = new HashSet<User>(); } public Guid Id { get; set; } public Guid ItemId { get; set; } [ForeignKey("ItemId")] public virtual Item Item { get; set; } [InverseProperty("Association")] public virtual ICollection<User> Users { get; set; } } 一个项目类: public partial class Item { public Item() { this.Associations = new HashSet<Association>(); } public Guid Id { get; set; } public ItemTypeEnum Type { get; set; } [InverseProperty("Item")] public virtual ICollection<Association> Associations { get; set; } }

2022-05-16 01:33:07    分类:技术分享    c#   entity-framework   lambda   expression

Why does a lambda convert to a bool whose value is true?

问题 #include <iostream> void IsTrue(const bool value) { if (value) { std::cout << "value is True!\n"; } } int main() { IsTrue([]() { ; /* some lambda */ }); return 0; } 输出: value is True! 为什么 lambda 在 GCC 和 Clang 上评估为true ? MSVC 无法构建它(无法将 lambda 转换为 bool)。 它是编译器错误吗? 或者标准的哪一段允许这样做? 回答1 C++14 标准( §5.1.2 )说: 没有 lambda 捕获的非泛型 lambda 表达式的闭包类型有一个公共的非虚拟非显式 const 转换函数,指向具有与闭包类型相同的参数和返回类型的 C++ 语言链接 (7.5) 的函数的指针函数调用运算符。 这个转换函数返回的值应该是一个函数的地址,当被调用时,它与调用闭包类型的函数调用运算符具有相同的效果。 由于函数指针可以隐式转换为bool ,因此您会得到显示的结果。 这是完全合法的。 MSVC 不会编译它,因为这个转换运算符被不同的调用约定( __stdcall 、 __cdecl等)重载。 当为x64编译时,所有这些调用约定都没有使用,所以只有一个转换运算¬

2022-05-15 21:36:04    分类:技术分享    c++   lambda   boolean   language-lawyer

getting unhandled exception in try catch block java

问题 我已经在我的代码中添加了 try catch 块,尽管我收到编译时错误说未处理的异常。 try { aList.stream.forEach(a->bList.addAll(getAValues(a))); }catch(CustomizedException e){ log.debug(e.getMessage()); } getAValues(String a) 方法抛出相同的“CustomizedException”。 但仍然得到未处理的异常。 getAValues(String a) throws CustomizedException { //some code } 回答1 Exception needs to be caught inside your lambda expression body aList.stream.forEach(a -> { try { bList.addAll(getAValues(a)) } catch(CustomizedException cex) { // handle it } });

2022-05-15 21:20:11    分类:技术分享    java   lambda   try-catch   unhandled-exception

C++ std::priority_queue uses the lambda expression

问题 有编译器不能通过的语句。 我无法理解。 谁能详细告诉我或如何解决? 向您致以最良好的祝愿。 声明如下: std::priority_queue<int,std::vector<int>,[](const int& lhs,const int& rhs) { return lhs<rhs; } > pq; 编译器给出的信息如下: type/value mismatch at argument 3 in template parameter list for 'template<class _Tp, class _Sequence, class _Compare> class std::priority_queue' cppreference站点中引入的std::priority_queue:http://en.cppreference.com/w/cpp/container/priority_queue 主要结构如下: template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> > class priority_queue; 回答1 您显示的声明具有一个值,即 lambda,作为实际模板参数,其中形式模板参数(参数

2022-05-15 16:14:04    分类:技术分享    c++   c++11   lambda