您可以使用System.getProperties()
获取JVM属性的Properties
实例;您将如何使用Java 8代码将所有属性打印到控制台?
答案 0 :(得分: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
,其第一个参数为{{1 },它的第二个参数是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
。写这个“匿名lambda”的另一种方法是:
Object
(不是这样)旁注:即使它有点过时,你真的想看this video(是的,这是一个小时长;是的,值得一看。)
(不是这样)旁注2:您可能已注意到Map
's .forEach()
mentions a default implementation;这意味着您的自定义(Object key, Object value) -> System.out.println(key + ": " + value)
实现或外部库的其他实现将能够使用Map
(例如,Guava的.forEach()
)。存在许多关于Java集合的此类方法;不要犹豫,对“老狗”使用这些“新方法”。
答案 1 :(得分:5)
@fge错过了一个非常短的版本,这个版本肯定取决于toString
Map.Entry
的实现。
public class VeryShortFoo {
public static void main(String... args) {
System.getProperties().entrySet().forEach(System.out::println);
}
}
entrySet
已进行流式处理,每个Map.Entry
都会打印时引用out.println
。Map.Entry
toString
的实现通常会返回getKey() + "=" + getValue()
。这是我非常喜欢的另一个。
public class ElegantFoo {
public static void main(String... args) {
System.getProperties().entrySet().stream()
.map(e -> e.getKey() + ": " + e.getValue())
.forEach(System.out::println);
}
}
entrySet
再次流式传输(此时显式调用stream
)。Stream#map
执行从一种类型的元素到另一种类型的元素的1:1转换。在此,它将Stream<Map.Entry>
转换为Stream<String>
。Stream<String>
。答案 2 :(得分:0)
在Java 8中,Properties
类继承了名为HashTable
的{{1}}的新方法。这个新方法接受函数(功能接口)作为参数传递给它。更具体地说,它接受功能接口forEach
。该功能界面的功能方法是BiConsumer<T,U>
。在Java 8中,所有功能接口都可以写为Lambda表达式。因此,以下是我们如何在accept(T t, U u)
实例中显示所有属性:
Property
答案 3 :(得分:0)
printProperties(System.getProperties());
public static void printProperties(Properties properties) {
new TreeSet<>(properties.keySet()).forEach((k) -> {
System.out.println(k + " : " + properties.get(k));
});
}
答案 4 :(得分:0)
System.getProperties().list(System.out);