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

标签 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 {
        // 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)
    }
}

我在这行代码中遇到问题:

let a = simple.id.iter().len();

最佳答案

如果Option<String>有一个值,那么它的迭代器将有一个要迭代的元素。

如果Option<String>没有值,那么它的迭代器将有 0 个元素要迭代。

换句话说 alet a = simple.id.iter().len();simple.id 中的元素数,如果有 id,则为 1;如果没有,则为 0。

(len 的实际计算发生在Item.size_hint 中,你可以看到它的来源here)。

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

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

Optional来自 Java 8,如

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

关于java - Java 中 Rust 的 Option::iter 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461750/

相关文章:

java - 如何在 JAX-RS/Jersey REST 应用程序中实际实现分页​​/排序/过滤?

java - 如何在Java应用程序中维护xsd文件(ddex规范)的增量版本?

java - 替换所有重复字符

c++ - 有没有办法关闭 C++ 和 Rust 编译的循环优化?

rust - 函数返回不可变引用,但借用检查器不这么认为

rust - 为什么调用 FnOnce 关闭是一个 Action ?

java - 使用特定语言学习算法的方法

java android 给文件设置密码

rust - 编写一个函数来获取引用和值类型的迭代

rust - ref 能做什么而 references 不能?