Java中Rust的Option::iter的等价物是什么?

Java中Rust的Option::iter的等价物是什么?,java,rust,Java,Rust,我有下面的Rust代码,我想把它翻译成Java,所以我首先需要理解代码 pub struct SimpleSelector { pub tag_name: Option<String>, pub id: Option<String>, pub class: Vec<String>, } impl Selector { pub fn specificity(&self) -> Specificity {

我有下面的Rust代码,我想把它翻译成Java,所以我首先需要理解代码

pub struct SimpleSelector {
    pub tag_name: Option<String>,
    pub id: Option<String>,
    pub class: Vec<String>,
}

impl Selector {
    pub fn specificity(&self) -> Specificity {
        // http://www.w3.org/TR/selectors/#specificity
        let Selector::Simple(ref simple) = *self;
        let a = simple.id.iter().len();
        let b = simple.class.len();
        let c = simple.tag_name.iter().len();
        (a, b, c)
    }
}
如果该选项有一个值,那么它的迭代器将有一个元素进行迭代

如果该选项没有值,则其迭代器将有0个元素进行迭代

换言之,让a=simple.id.iter.len;simple.id中的元素计数,如果有id,则为1;如果没有id,则为0

len的实际计算发生在Item.size\u提示中,您可以看到它的源代码

如果是Java,则可以使用null,如

或者来自Java8,如

public class SimpleSelector {
  public Optional<String> tag_name;
  public Optional<String> id;
  public ArrayList<String> clazz;
}
// ...
int a = id.empty() ? 0 : 1;
如果该选项有一个值,那么它的迭代器将有一个元素进行迭代

如果该选项没有值,则其迭代器将有0个元素进行迭代

换言之,让a=simple.id.iter.len;simple.id中的元素计数,如果有id,则为1;如果没有id,则为0

len的实际计算发生在Item.size\u提示中,您可以看到它的源代码

如果是Java,则可以使用null,如

或者来自Java8,如

public class SimpleSelector {
  public Optional<String> tag_name;
  public Optional<String> id;
  public ArrayList<String> clazz;
}
// ...
int a = id.empty() ? 0 : 1;

作为对@ArtemGr答案的补充,您还可以将Option视为只能保存0或1个值的集合。Java代码可能如下所示:

public class SimpleSelector {
  public ArrayList<String> tag_name;
  public ArrayList<String> id;
  public ArrayList<String> clazz;
}
// ...
int a = id.size();
但是在Java中使用等价物的null将被编译,但可能在运行时崩溃:

public static void thing(String id) {
  id.length();  // id could be null or not-null!
}

作为对@ArtemGr答案的补充,您还可以将Option视为只能保存0或1个值的集合。Java代码可能如下所示:

public class SimpleSelector {
  public ArrayList<String> tag_name;
  public ArrayList<String> id;
  public ArrayList<String> clazz;
}
// ...
int a = id.size();
但是在Java中使用等价物的null将被编译,但可能在运行时崩溃:

public static void thing(String id) {
  id.length();  // id could be null or not-null!
}
家长问题:。可能的答案:。因此,如果id为None,则a为0;如果id为Some,则a为1。有更清晰的方法来写!例如,self.id.is_作为uint:家长问题:。可能的答案:。因此,如果id为None,则a为0;如果id为Some,则a为1。有更清晰的方法来写!例如,self.id.is_作为uint: