标签: lambda

Lambda表达式将数组/ String列表转换为数组/整数列表

由于Java 8带有强大的lambda表达式,

我想写一个函数将一个List /数组的字符串转换为数组/整数列表,浮点数,双精度等.

在普通的Java中,它会如此简单

for(String str : strList){
   intList.add(Integer.valueOf(str));
}
Run Code Online (Sandbox Code Playgroud)

但是如果将一个字符串数组转换为整数数组,我如何用lambda实现相同的效果.

java arrays collections lambda java-8

107
推荐指数
5
解决办法
16万
查看次数

lambda表达式中使用的变量应该是final或者有效的final

lambda表达式中使用的变量应该是final或者有效的final

当我尝试使用calTz它时显示此错误.

private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
    try {
        cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
            VTimeZone v = (VTimeZone) component;
            v.getTimeZoneId();
            if (calTz == null) {
                calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
            }
        });
    } catch (Exception e) {
        log.warn("Unable to determine ical timezone", e);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

java lambda

107
推荐指数
5
解决办法
14万
查看次数

有没有办法指定一个"空"的C#lambda表达式?

我想声明一个"空"的lambda表达式,它确实没有.有没有办法在不需要方法的情况下做这样的事情DoNothing()?

    public MyViewModel()
    {
        SomeMenuCommand = new RelayCommand(
                x => DoNothing(),
                x => CanSomeMenuCommandExecute());
    }

    private void DoNothing()
    {
    }

    private bool CanSomeMenuCommandExecute()
    {
        // this depends on my mood
    }
Run Code Online (Sandbox Code Playgroud)

我这样做的意图只是控制我的WPF命令的启用/禁用状态,但这是暂且不说的.也许这对我来说太早了,但我想必须有办法以x => DoNothing()某种方式声明lambda表达式来完成同样的事情:

    SomeMenuCommand = new RelayCommand(
        x => (),
        x => CanSomeMenuCommandExecute());
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?似乎没有必要采用无操作方法.

c# lambda

106
推荐指数
4
解决办法
4万
查看次数

如何使用lambda表达式检查元素是否存在?

具体来说,我有TabPane,我想知道是否有特定ID的元素.

所以,我想用Java中的lambda表达式做到这一点:

boolean idExists = false;
String idToCheck = "someId";

for (Tab t : tabPane.getTabs()){
    if(t.getId().equals(idToCheck)) {
        idExists = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

106
推荐指数
2
解决办法
10万
查看次数

_ =>这个下划线在Lambda表达式中意味着什么?

lambda表达式_=> expr意味着什么?

_作为lambda输入的目的是什么?

例:

int count = 0;
list.ForEach(_ => count += 1);
Run Code Online (Sandbox Code Playgroud)

c# lambda c#-4.0

105
推荐指数
5
解决办法
2万
查看次数

如何使用lambda表达式调试stream().map(...)?

在我们的项目中,我们正在迁移到Java 8,我们正在测试它的新功能.

在我的项目中,我使用Guava谓词和函数来使用Collections2.transform和过滤和转换一些集合Collections2.filter.

在这次迁移中,我需要将例如guava代码更改为java 8更改.所以,我正在做的改变是这样的:

List<Integer> naturals = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10,11,12,13);

Function <Integer, Integer> duplicate = new Function<Integer, Integer>(){
    @Override
    public Integer apply(Integer n)
    {
        return n * 2;
    }
};

Collection result = Collections2.transform(naturals, duplicate);
Run Code Online (Sandbox Code Playgroud)

至...

List<Integer> result2 = naturals.stream()
    .map(n -> n * 2)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

使用guava我调试代码非常容易,因为我可以调试每个转换过程,但我关心的是如何调试例如.map(n -> n*2).

使用调试器我可以看到一些代码,如:

@Hidden
@DontInline
/** Interpretively invoke this form on the given arguments. */
Object interpretWithArguments(Object... argumentValues) throws Throwable {
    if (TRACE_INTERPRETER)
        return interpretWithArgumentsTracing(argumentValues);
    checkInvocationCounter();
    assert(arityCheck(argumentValues));
    Object[] …
Run Code Online (Sandbox Code Playgroud)

java debugging lambda java-8

104
推荐指数
5
解决办法
6万
查看次数

Lambda表达式和通用方法

假设我有一个通用接口:

interface MyComparable<T extends Comparable<T>>  {
    public int compare(T obj1, T obj2);
}
Run Code Online (Sandbox Code Playgroud)

一个方法sort:

public static <T extends Comparable<T>> 
       void sort(List<T> list, MyComparable<T> comp) {
    // sort the list
}
Run Code Online (Sandbox Code Playgroud)

我可以调用此方法并将lambda表达式作为参数传递:

List<String> list = Arrays.asList("a", "b", "c");
sort(list, (a, b) -> a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)

那会很好.

但现在如果我使接口非泛型,并且方法通用:

interface MyComparable {
    public <T extends Comparable<T>> int compare(T obj1, T obj2);
}

public static <T extends Comparable<T>> 
       void sort(List<T> list, MyComparable comp) {
}
Run Code Online (Sandbox Code Playgroud)

然后调用它:

List<String> list = Arrays.asList("a", "b", "c");
sort(list, (a, …
Run Code Online (Sandbox Code Playgroud)

java generics lambda java-8

103
推荐指数
3
解决办法
6万
查看次数

Java8 Lambdas与匿名类

由于Java8最近已经发布,并且它的全新lambda表达式看起来非常酷,我想知道这是否意味着我们习以为常的Anonymous类的消亡.

我一直在研究这个问题,并找到了一些很酷的例子,说明Lambda表达式将如何系统地替换这些类,例如Collection的sort方法,它用于获取Comparator的Anonymous实例来执行排序:

Collections.sort(personList, new Comparator<Person>(){
  public int compare(Person p1, Person p2){
    return p1.firstName.compareTo(p2.firstName);
  }
});
Run Code Online (Sandbox Code Playgroud)

现在可以使用Lambdas完成:

Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
Run Code Online (Sandbox Code Playgroud)

而且看起来非常简洁.所以我的问题是,有没有理由继续在Java8中使用这些类而不是Lambdas?

编辑

同样的问题,但在相反的方向,使用Lambdas而不是匿名类有什么好处,因为Lambdas只能用于单个方法接口,这个新功能只是在少数情况下使用的快捷方式还是真的有用?

java lambda anonymous-class java-8

103
推荐指数
4
解决办法
6万
查看次数

将lambda表达式用于事件处理程序

我目前有一个声明如下的页面:

public partial class MyPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //snip
        MyButton.Click += (o, i) =>
        {
            //snip
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我最近才从1.1迁移到.NET 3.5,所以我习惯在Page_Load之外编写事件处理程序.我的问题是; 在使用lambda方法时,我应该注意哪些性能缺陷或缺陷?我更喜欢它,因为它当然更简洁,但我不想牺牲性能来使用它.谢谢.

c# performance events lambda

101
推荐指数
3
解决办法
10万
查看次数

Comparator.reversed()不使用lambda进行编译

我有一个包含一些User对象的列表,我正在尝试对列表进行排序,但只能使用方法引用,使用lambda表达式,编译器会给出错误:

List<User> userList = Arrays.asList(u1, u2, u3);
userList.sort(Comparator.comparing(u -> u.getName())); // works
userList.sort(Comparator.comparing(User::getName).reversed()); // works
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Run Code Online (Sandbox Code Playgroud)

错误:

com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol
            userList.sort(Comparator.comparing(u -> u.getName()).reversed());
                                                     ^
symbol:   method getName()
location: variable u of type Object
1 error
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

101
推荐指数
3
解决办法
2万
查看次数