【发布时间】:2019-08-11 07:23:27
【问题描述】:
如何检查列表是否只有一个非空元素,如果是,则使用 java 8 或 Streams 检索相同的元素?
我的一个方法返回对象列表需要检查返回的列表是否只包含一个非空对象,如果是这样,它会创建一个如下定义的映射,需要记录如下错误。
`public void myMethod() {
List<MyClass> tst = getAll();
if(!tst.isEmpty() ) {
if( tst.size() == 1) {
if(tst.get(0)!= null) {
MyClass class1 = tst.get(0);
Map<Integer,MyClass> m =
Stream.of(class1).collect(Collectors.toMap(MyClass:: getId,
Function.identity()));
}
}
else {
LOGGER.error("Multiple object found - {} object", tst.size());
}
}`
我正在寻找一种以干净和标准格式编写的方法,因为我有三个 If 条件
【问题讨论】:
-
你试过什么?
-
也许,就像在任何其他 Java 版本中一样。
-
为什么要使用
Stream's 呢?为什么不只是简单的尺寸检查,get()和null检查? -
“检索相同”是什么意思?
-
if(tst.size() == 1 && tst.get(0) != null) return Collections.singletonMap(tst.get(0).getId(), tst.get(0));“非空”的测试是多余的,因为大小为 1 的列表不为空,并且使用 Stream API 在这里没有任何好处。
标签: java arraylist java-8 java-stream