当前位置: 首页 > 知识库问答 >
问题:

使用Stream API在每个对象上调用方法的“好”方法

西门威
2023-03-14

是否可以在使用者中运行方法,如方法引用,但要在传递给使用者的对象上运行:

Arrays.stream(log.getHandlers()).forEach(h -> h.close());

会是这样的:

Arrays.stream(log.getHandlers()).forEach(this::close);

但那不起作用...

方法引用是否有可能,或者是-

共有3个答案

齐迪
2023-03-14

当然可以,但必须使用方法引用的正确语法,即传递方法所属的类:

Arrays.stream(log.getHandlers()).forEach(Handler::close);
汪兴旺
2023-03-14

我想应该是:

Arrays.stream(log.getHandlers()).forEach(Handler::close);

提供了日志。getHandlers()返回Handler类型的对象数组

勾岳
2023-03-14

你不需要这个YourClassName::close将调用传递给使用者的对象上的方法:

Arrays.stream(log.getHandlers()).forEach(YourClassName::close);

有四种方法引用(来源):

Kind                                                                         Example
----                                                                         -------
Reference to a static method                                                 ContainingClass::staticMethodName
Reference to an instance method of a particular object                       containingObject::instanceMethodName
Reference to an instance method of an arbitrary object of a particular type  ContainingType::methodName
Reference to a constructor                                                   ClassName::new

在你的情况下,你需要第三种。

 类似资料:
  • 我创建了一个静态变量来保存应用程序上下文,因为我要在课堂上的其他地方使用它。这个变量被分配到类的构造函数中,我得到了以下错误——“不要将Android上下文类放在静态字段中(静态引用MyClass,其中字段appContext指向上下文);这是内存泄漏(也会中断即时运行)[StaticFieldLeak]。” 下面是MyClass中的代码: 为了解决这个问题,我考虑将appContext作为弱引用

  • 问题内容: 我在调用 非静态 方法时感到困惑 我知道 method-1 和 method-2 都将调用 doThis() ,但是功能上有什么区别吗? 问题答案: 功能上有区别吗? 两者的行为方式相同。 第二个选项不允许您再次重用该实例。在单行return语句中可能很方便和简洁(例如,请考虑使用构建器模式,其中每个构造方法都将返回一个半初始化的实例): 或者创建一个对象仅执行一次定义的操作。 方法2

  • 7.2.3 对象方法的调用 一旦创建了对象,就可以通过向对象发消息来调用对象的方法。消息的格式如下: <对象>.<方法>(<实参>) 其含义是请求<对象>执行<方法>,方法定义中列出的形式参数由<实参>提供。 例如,接着前面的例子执行如下语句: >>> p1.whatName() My name is Lucy >>> p2.whatName() My name is Tom >>> p2.ho

  • 本文向大家介绍在Java中使用反射调用对象的方法,包括了在Java中使用反射调用对象的方法的使用技巧和注意事项,需要的朋友参考一下 可以使用java.lang.Class.getDeclaredMethods()方法调用对象的方法。此方法返回一个数组,其中包含具有公共,私有,受保护和默认访问权限的所有Method对象。但是,不包括继承的方法。 另外,如果类或接口没有方法,或者在Class对象中表示

  • 我想在一个方法pointcut上编写一个方面,在该方面中,我想使用调用pointcut方法的对象调用另一个方法。 类似于这样: 我不确定我是否使方面的用法太复杂了,因为我在任何地方都找不到这样的用法。

  • 问题内容: 假设我有汽车清单: 如何缩短上面的代码?简而言之,如何在List的每个元素上调用方法? 例如,在Python中: 问题答案: 更新: 有关使用lambda表达式的Java8解决方案,请参见aaiezza的答案。 Java 8之前的原始答案: 使用Guava可以实现效果,实现比您现有的更加冗长: (请记住,返回的视图将延迟应用该函数- 如果要立即复制,则需要将返回的列表复制到新列表中。)