【问题标题】:Check List has only one non null element and retrieve it using Java 8检查列表只有一个非空元素并使用 Java 8 检索它
【发布时间】: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 &amp;&amp; tst.get(0) != null) return Collections.singletonMap(tst.get(0).getId(), tst.get(0));“非空”的测试是多余的,因为大小为 1 的列表不为空,并且使用 Stream API 在这里没有任何好处。

标签: java arraylist java-8 java-stream


【解决方案1】:

类似的东西应该可以解决问题,但它不使用流。如果您真的需要使用流,请这样说,我会尝试一下:)

int notNullCount = 0;
Object myNotNullElement;
for (Object element : myArray){
    if (notNullCount > 1){
        //Throw exception or do whaterver you need to do to signal this
        break;
    }

    if (element != null){
        myNotNullElement = element;
        notNullCount++;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多