Java流操作返回特定对象

时间:2018-11-19 15:21:30

标签: java java-8 java-stream

我有一个整数列表,我愿意检查是否有一个等于0或1的整数。

如果存在这样的Integer,我应该返回一个度数等于找到的特定整数的节点,除非我应该返回null;

您可以看到我的程序运行良好,但是我正在寻求更好的解决方案,尤其是在 getNode()方法中使用更少的代码。

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Optional;


public class Example {

     public static void main( String[] args ) throws IOException {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);list.add(2);list.add(3);
        System.out.println(getNode(list));
     }

     public static Node getNode(ArrayList<Integer> list ){
         Optional<Integer> index = list.stream().filter(l->l==1 || l==2).findAny();
         if (index.isPresent())
             return new Node(index.get());
         else
             return null;
     }
   }

class Node{
    int degree;

    Node(int degree){
        this.degree = degree;
    }
    @Override
    public String toString() {
        return this.degree+"";
    }
}

1 个答案:

答案 0 :(得分:0)

您可以将其简化为:

public static Node getNode(ArrayList<Integer> list) {
    return list.stream() // Stream<Integer>
               .filter(l -> l == 1 || l == 2)
               .findAny() // Optional<Integer>
               .map(Node::new) // Optional<Node>
               .orElse(null); // Node or null
}