相关疑难解决方法(0)

是否存在可用于任何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中lambda() - > {}的含义

我正在看下面的Stack Overflow答案: 如何在运行时更改Spring的@Scheduled fixedDelay

在代码中有以下行:

schedulerFuture = taskScheduler.schedule(() -> { }, this);
Run Code Online (Sandbox Code Playgroud)

我想知道lambda () -> {}在该代码中的含义.我需要在不使用lambdas的情况下编写它.

java lambda java-7 java-8 java-9

26
推荐指数
1
解决办法
2620
查看次数

JDK是否提供虚拟消费者?

我需要在代码块中使用流中的'n'项然后完成,实质上:

 public static <T> void eat(Stream<T> stream, int n) 
     // consume n items of the stream (and throw them away)
 }
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我无法改变签名返回Stream<T>简单return stream.skip(n); 我必须实际丢弃流中的一些元素(不是简单的逻辑) - 为下游消费者做好准备,这不需要知道这是怎么发生的,甚至不知道发生了什么.

最简单的方法是使用limit(n),但我必须调用流终止方法来激活流,所以本质上我有:

public static <T> void skip(Stream<T> stream, int n) {
    stream.limit(n).forEach(t -> {});
}
Run Code Online (Sandbox Code Playgroud)

注意:此代码完全简化了实际代码,仅用于说明目的.实际上,限制将不起作用,因为存在围绕什么/如何消耗元素的逻辑.可以把它想象成从流中消费"header"元素,然后让消费者使用"body"元素.

这个问题是关于"无所事事"的lambda t -> {}.

在JDK中的某个地方是否有"无所事事"的消费者,比如"无所事事"功能Function.identity()

java consumer java-8 java-stream

24
推荐指数
3
解决办法
6238
查看次数

为什么java.util.function.Consumer没有identity()?

我只是注意到Consumer没有identity()像有那样的方法java.util.function.Function

是的,这只是一个可以放入东西的洞,但至少可以完全清楚地知道我不仅仅是在括号中遗漏了一些代码。

以这个人为的例子为例:

public void applyConsumerIfExists(String key, String param) {
    Map<String, Consumer<String>> consumers = new HashMap<>();
    consumers.put("a", MyClass::myConsumer);

    // I can create my own, but that's no fun :(
    Consumer<String> identity = input -> {};
    consumers.getOrDefault(key, identity).accept(param);

    // DOESN'T WORK, since identity() doesn't exist on Consumer
    consumers.getOrDefault(key, Consumer.identity()).accept(param);
}
Run Code Online (Sandbox Code Playgroud)

问题

为什么没有Consumer方法identity呢?

java java-8

5
推荐指数
1
解决办法
2528
查看次数