java - 我将如何使用 Java 8 和 lambda 打印 JVM 的系统属性?

标签 java lambda java-8

您可以使用 System.getProperties() 获取 JVM 属性的 Properties 实例;您将如何使用 Java 8 代码将所有属性打印到控制台?

最佳答案

一个解决方案:

public final class Foo
{
    private static void printProperty(final Object key, final Object value)
    {
        System.out.println(key + ": " + value);
    }

    public static void main(final String... args)
    {
        System.getProperties().forEach(Foo::printProperty);
    }
}

纲要:

  • Properties延伸Hashtable<Object, Object>它本身实现了 Map<Object, Object> ;
  • Map有一个 .forEach() 参数为 BiConsumer 的方法;
  • BiConsumerfunctional interface ;
  • 静态方法printProperty()Foo恰好与 BiConsumer<Object, Object> 具有相同的签名: 它的“返回值”是 void , 它的第一个参数是 Object , 它的第二个参数是 Object ;
  • 因此我们可以使用Foo::printProperty作为方法引用。

一个较短的版本是:

public final class ShorterFoo
{
    public static void main(final String... args)
    {
        System.getProperties()
            .forEach((key, value) -> System.out.println(key + ": " + value));
    }
}

在运行时,这不会产生任何影响。请注意第二个示例中的类型推断:编译器可以推断出 keyvalue类型为 Object .编写此“匿名 lambda”的另一种方法是:

(Object key, Object value) -> System.out.println(key + ": " + value)

(不是这样)旁注:虽然它有点过时,但你真的很想看this video (是的,一小时长;是的,这一切都值得一看)。


(并非如此)旁注 2:您可能已经注意到 Map 's .forEach() mentions a default implementation ;这意味着您的自定义 Map来自外部库的实现或其他实现将能够使用 .forEach() (例如,Guava 的 ImmutableMap s)。 Java 集合上存在许多这样的方法;毫不犹豫地对“老狗”使用这些“新方法”。

关于java - 我将如何使用 Java 8 和 lambda 打印 JVM 的系统属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747982/

相关文章:

java - 如何在不下载android的情况下显示来自服务器的图像

java - 从命令行执行包含 jar 的 jar

c# - 使用忽略重载的 lambda 语法选择方法表达式

c++ - 如何将可调用对象放入 C++ 中的映射中?

字符串数组上的 Java 8 流

java - Java8 中的 Kerberos/SPNEGO 服务器端身份验证更改

java - QueryDsl:使用 or() 和 not() 为条件生成错误的 sql

lambda - 范围函数 apply/with/run/also/let : Where do their names come from?

java - 如何对具有不同方法名称但相同返回类型的不同对象应用相同的过程

java - 在 JavaFX 中禁用按钮