您可以使用 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
的方法; -
BiConsumer
是 functional 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));
}
}
在运行时,这不会产生任何影响。请注意第二个示例中的类型推断:编译器可以推断出 key
和 value
类型为 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/