如何返回方法不期望的值

时间:2018-04-26 21:42:44

标签: java binary-tree optional

这是Main方法的一部分

    System.out.println(node.getNode(3)); //in the end i have to get Optional[3]
    System.out.println(node.getNode(7)); // in the end I have to get Optional[7]

我有方法

public Optional<Node> getNode(Integer value) {
    return getNodeHelper(this, value);
}

public Optional<Node> getNodeHelper(Node note, Integer value) {
    if (note.value.equals(value)) {
        return Optional.of(note);
    } else if (note.value < value) {
        return getNodeHelper(note.right, value);
    } else if (note.value < value) {
        return getNodeHelper(note.left, value);
    }
    return Optional.empty();
}

接下来的问题是,我应该如何回归,最终得到可选[3]或可选[7]而不是一些可选[ee.ttu.iti0202.tree.Node@6615435c]

这条线我无法改变(大学的任务)

public Optional<Node> getNodeHelper(Node note, Integer value)

我在这个类中使用的变量是:

private Integer value;
Node left;
Node right;

返回类型Optional<Integer>会更简单,然后我可以写回Optional.of(note.value),这就是全部,但我必须使用Optional<Node>

讲师建议使用覆盖,但我不明白该怎么做。

2 个答案:

答案 0 :(得分:1)

getNode()方法地图中,返回的Optional<Node>转换为Optional<Integer>

public Optional<Integer> getNode(Integer value) {
    return getNodeHelper(this, value).map(Node::getValue);
}

答案 1 :(得分:0)

在Node类中可以编写toString()方法吗?并在其中返回Integer的值?

如果你编写了toString()方法,那么它将不会返回Optional [ee.ttu.iti0202.tree.Node@6615435c]值,而是返回你在toString()方法中返回的值。

//overriding the toString() method 
public String toString(){ 
  return value.toString();  
 }