Tag: lambda

Java 8 Lambdaexpression式 – 嵌套类中的多个方法

我正在阅读有关新function: http : //www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html 我看到下面的例子: 使用匿名类: button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Action Detected"); } }); 随着Lambda: button.addActionListener(e -> { System.out.println("Action Detected"); }); 如果他们想要在匿名类中实现多个方法,有人会用MouseListener做什么,例如: public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); […]

genericslambda如何在C ++ 14中工作?

genericslambda在C ++ 14标准中如何工作( auto关键字作为参数types)? 它是基于C ++模板,其中每个不同的参数types编译器生成一个具有相同的主体,但replacetypes(编译时多态性)的新function,或者是更类似于Java的generics(types擦除)? 代码示例: auto glambda = [](auto a) { return a; };

在c#中组合两个lambdaexpression式

给定一个像这样的类结构: public class GrandParent { public Parent Parent { get; set;} } public class Parent { public Child Child { get; set;} } public class Child { public string Name { get; set;} } 和下面的方法签名: Expression<Func<TOuter, TInner>> Combine (Expression<Func<TOuter, TMiddle>>> first, Expression<Func<TMiddle, TInner>> second); 我怎样才能实现上述方法,以便我可以这样调用它: Expression<Func<GrandParent, Parent>>> myFirst = gp => gp.Parent; Expression<Func<Parent, string>> mySecond […]

Java 8:Lambdastream,按exception进行过滤

我尝试使用Java 8的Lambdaexpression式时遇到问题。通常情况下,它可以正常工作,但是现在我有了抛出IOException的方法。 最好看看下面的代码: class Bank{ …. public Set<String> getActiveAccountNumbers() throws IOException { Stream<Account> s = accounts.values().stream(); s = s.filter(a -> a.isActive()); Stream<String> ss = s.map(a -> a.getNumber()); return ss.collect(Collectors.toSet()); } …. } interface Account{ …. boolean isActive() throws IOException; String getNumber() throws IOException; …. } 问题是,它不能编译,因为我必须捕捉isActive-和getNumber-Methods的可能exception。 但即使我明确地使用下面的try-catch-Block,它仍然不能编译,因为我没有捕捉到exception。 所以无论是在JDK中有一个错误,或者我不知道如何捕获这些exception。 class Bank{ …. //Doesn't compile either public […]

LINQ:点符号与查询expression式

一般来说,我开始使用LINQ(到目前为止XML和SQL)。 我已经看到,有时有两种或两种以上的方法来达到相同的结果。 以这个简单的例子来说,据我所知,两者都返回完全一样的东西: SomeDataContext dc = new SomeDataContext(); var queue = from q in dc.SomeTable where q.SomeDate <= DateTime.Now && q.Locked != true orderby (q.Priority, q.TimeCreated) select q; var queue2 = dc.SomeTable .Where( q => q.SomeDate <= DateTime.Now && q.Locked != true ) .OrderBy(q => q.Priority) .ThenBy(q => q.TimeCreated); 除了我在语法上可能犯的错误或缺失的参数或差异之外,这个想法是有两种expression同一事物的方式; 我知道第一种方法有一些局限性,“点符号”更完整,除此之外,还有其他的优点吗?

Visual Studiodebugging“快速观察”工具和lambdaexpression式

为什么在“快速监视”窗口中debugging时不能使用lambdaexpression式? UPD:另见 http://blogs.msdn.com/b/jaredpar/archive/2009/08/26/why-no-linq-in-debugger-windows.aspx http://blogs.msdn.com/b/jaredpar/archive/2010/06/02/why-is-linq-absent-from-debugger-windows-part-2.aspx

在Stream :: flatMap中使用Java 8的Optional

新的Java 8stream框架和朋友提供了一些非常简洁的java代码,但是我遇到了一个看似简单的情况,这很难做到简洁。 考虑一个List<Thing> things和方法Optional<Other> resolve(Thing thing) 。 我想把这些Thing映射到Optional<Other> s并获得第一个Other 。 明显的解决scheme是使用things.stream().flatMap(this::resolve).findFirst() ,但flatMap需要你返回一个stream,而Optional没有stream()方法(或者它是Collection或提供方法将其转换为或Collection为一个Collection )。 我能想到的最好的是这样的: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); 但是,这似乎是一个非常普遍的情况,似乎非常啰嗦。 任何人有更好的主意?

将.net Func <T>转换为.netexpression式<Func <T >>

使用方法调用从lambda转换为Expression很容易 public void GimmeExpression(Expression<Func<T>> expression) { ((MemberExpression)expression.Body).Member.Name; // "DoStuff" } public void SomewhereElse() { GimmeExpression(() => thing.DoStuff()); } 但是我想把Func转换成expression式,只有在极less数情况下… public void ContainTheDanger(Func<T> dangerousCall) { try { dangerousCall(); } catch (Exception e) { // This next line does not work… Expression<Func<T>> DangerousExpression = dangerousCall; var nameOfDanger = ((MemberExpression)dangerousCall.Body).Member.Name; throw new DangerContainer( "Danger manifested while " + […]

在lambdaexpression式中不能使用ref或out参数

为什么不能在lambdaexpression式中使用ref或out参数? 我今天遇到了错误,发现一个解决方法,但我仍然好奇,为什么这是一个编译时错误。 这是一个简单的例子: private void Foo() { int value; Bar(out value); } private void Bar(out int value) { value = 3; int[] array = { 1, 2, 3, 4, 5 }; int newValue = array.Where(a => a == value).First(); }

语法后面sorting(键= lambda :)

我不太了解sorted()参数的语法: key=lambda variable: variable[0] 不是lambda任意的? 为什么variable在dict两次?