标签: java-8

Java Lambda Stream Distinct()在任意键上?

我经常遇到Java lambda表达式的问题,当我想在对象的任意属性或方法上使用distinct()一个流时,但想要保留对象而不是将其映射到该属性或方法.我开始创建这里讨论的容器,但我开始做足够的事情,它变得烦人,并制作了很多样板类.

我将这个Pairing类放在一起,该类包含两个类型的两个对象,并允许您指定左,右或两个对象的键控.我的问题是......对于某些类型的关键供应商,distinct()是否真的没有内置的lambda流功能?那真让我感到惊讶.如果没有,该课程能否可靠地完成该功能?

以下是它的调用方式

BigDecimal totalShare = orders.stream().map(c -> Pairing.keyLeft(c.getCompany().getId(), c.getShare())).distinct().map(Pairing::getRightItem).reduce(BigDecimal.ZERO, (x,y) -> x.add(y));
Run Code Online (Sandbox Code Playgroud)

这是配对课程

    public final class Pairing<X,Y>  {
           private final X item1;
           private final Y item2;
           private final KeySetup keySetup;

           private static enum KeySetup {LEFT,RIGHT,BOTH};

           private Pairing(X item1, Y item2, KeySetup keySetup) {
                  this.item1 = item1;
                  this.item2 = item2;
                  this.keySetup = keySetup;
           }
           public X getLeftItem() { 
                  return item1;
           }
           public Y getRightItem() { 
                  return item2;
           }

           public static <X,Y> Pairing<X,Y> keyLeft(X item1, Y item2) { …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

在Windows XP上安装JDK8 - advapi32.dll错误

我下载了JDK8 build b121,在尝试安装时遇到以下错误:

the procedure entry point RegDeleteKeyExA could not be located in the dynamic link library ADVAPI32.dll

操作系统是Windows XP,版本2002 Service Pack 3,32位.

java dll windows-xp java-8

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

使用Lambda的Java 8过滤器阵列

我有一个double[],我想在一行中过滤掉(创建一个没有新的数组)负值而不添加for循环.这是否可以使用Java 8 lambda表达式?

在python中,这将使用生成器:

[i for i in x if i > 0]
Run Code Online (Sandbox Code Playgroud)

是否有可能在Java 8中做同样简洁的事情?

java lambda java-8

59
推荐指数
1
解决办法
8万
查看次数

Java 8方法引用未处理的异常

我正在使用Java 8进行项目,发现了一种我无法理解的情况.

我有这样的代码:

void deleteEntity(Node node) throws SomeException {
    for (ChildNode child: node.getChildren()) {
       deleteChild(child);
    }
}

void deleteChild(Object child) throws SomeException {
    //some code
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但我可以用方法引用重写它:

void deleteEntity(Node node) throws SomeException {
    node.getChildren().forEach(this::deleteChild);
}
Run Code Online (Sandbox Code Playgroud)

并且此代码无法编译,从而产生错误Incompatible thrown types *SomeException* in method reference.

IDEA也给了我错误unhandled exception.

所以,我的问题是为什么?为什么代码为每个循环编译而不用lambda编译?

java lambda java-8

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

Java 8中的链接选项

寻找一种链接选项的方法,以便返回第一个存在的选项.如果没有,Optional.empty()则应退回.

假设我有几个像这样的方法:

Optional<String> find1()
Run Code Online (Sandbox Code Playgroud)

我想把它们链起来:

Optional<String> result = find1().orElse( this::find2 ).orElse( this::find3 );
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用,因为orElse期望一个值,并orElseGet期望一个Supplier.

java lambda optional java-8

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

根据Java 8中的属性从对象列表中删除重复项

我试图基于某些属性从对象列表中删除重复项.

我们可以使用java 8以简单的方式完成它

List<Employee> employee
Run Code Online (Sandbox Code Playgroud)

我们可以根据id员工的财产从中删除重复项.我已经看到帖子从字符串的arraylist中删除重复的字符串.

java list java-8

59
推荐指数
7
解决办法
9万
查看次数

在Java 8中并行生成了多少个线程?

在JDK8中,当我使用parallelStream时会产生多少个线程?例如,在代码中:

list.parallelStream().forEach(/** Do Something */);
Run Code Online (Sandbox Code Playgroud)

如果此列表包含100000个项目,将生成多少个线程?

另外,每个线程都可以获得相同数量的项目,还是随机分配?

java multithreading java.util.concurrent java-8

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

是否存在可用于任何lambda的无操作(NOP)的方法参考?

这可能听起来像一个奇怪的问题,但有没有办法在Java 8中引用Lambda的标准无操作(即null操作,空模式方法,无操作,无操作方法)方法.

目前,我有一个方法,需要一个,比方说,void foo(Consumer<Object>)我想给它一个无操作,我必须声明:

foo(new Consumer<Object>() { 
  public void accept(Object o) { 
    // do nothing 
  }
}
Run Code Online (Sandbox Code Playgroud)

在哪里我希望能够做到这样的事情:

foo(Object::null)
Run Code Online (Sandbox Code Playgroud)

代替.有类似存在吗?

不确定多参数方法如何工作 - 也许这是Java中lambdas的缺陷.

java lambda functional-programming java-8

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

java.util.Objects.isNull vs object == null

如你所知,java.util.Objects

此类包含用于对对象进行操作的静态实用程序方法.

其中一种方法是Objects.isNull().

我的理解是,Objects.isNull()通过省略第二个,可以消除意外地将空值分配给对象的可能性=.

但是,API Note指出:

此方法存在用作谓词,过滤器(Objects :: isNull)

会不会有任何理由/环境对我应该使用object == nullObjects.isNull()if语句

应该Objects.isNull()仅限于Predicates吗?

java compare java-8

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

为什么我们不能直接在Lambda函数中调用Thread#sleep()?

下面的代码给我一个编译时错误:

Thread t2 = new Thread(() -> {
    try { 
        sleep(1000);
    } 
    catch (InterruptedException e) {}
});
Run Code Online (Sandbox Code Playgroud)

对于类型A (其中A是我的类名),方法sleep(int)是未定义的.

然而,当我使用匿名内部类时,没有编译时错误:

Thread t1 = new Thread(){
    public void run(){
        try {
            sleep(1000);
        } catch (InterruptedException e) {}
    }
};
Run Code Online (Sandbox Code Playgroud)

以下代码也可以正常工作:

Thread t3 = new Thread(() -> System.out.println("In lambda"));
Run Code Online (Sandbox Code Playgroud)

如何在lambda表达式体内工作?请帮忙.

从许多答案中,我可以看到错误可以Thread.sleep(1000)在我的第一种方法中解决.但是,如果有人能向我解释范围和上下文如何在lambda表达式中工作,我真的很感激.

java lambda multithreading java-8

58
推荐指数
5
解决办法
6468
查看次数