【问题标题】:Java Arrays & Generics : Java Equivalent to C# IEnumerable<T>Java 数组和泛型:Java 等价于 C# IEnumerable<T>
【发布时间】:2010-09-26 14:48:00
【问题描述】:

所以在 C# 中,我可以将 string[] 视为 IEnumerable&lt;string&gt;

有 Java 等价物吗?

【问题讨论】:

    标签: java arrays generics


    【解决方案1】:

    Iterable&lt;String&gt; 等同于IEnumerable&lt;string&gt;

    如果数组实现Iterable,这将是一个奇怪的类型系统。 String[]Object[] 的一个实例,但 Iterable&lt;String&gt; 不是 Iterable&lt;Object&gt;。类和接口不能乘以不同的泛型参数实现相同的泛型接口。

    String[] 将像增强 for 循环中的 Iterable 一样工作。

    String[] 可以很容易地变成Iterable

    Iterable<String> strs = java.util.Arrays.asList(strArray);
    

    比数组更喜欢集合(无论如何对于非基元)。引用类型的数组有点奇怪,从 Java 1.5 开始就很少需要了。

    【讨论】:

    • 有关为什么不能在 Iterable 和 Iterable 之间转换的更多信息,请查看covariance and contravariance
    • 好的,现在让我们谈谈房间里 500 磅的大猩猩。你如何使用Iterable&lt;T&gt;? -- Java 中等价的yield return 语句是什么?
    • @BrainSlugs83 我认为这是一个不同的问题。
    【解决方案2】:

    你在找Iterable&lt;String&gt;吗?

    Iterable<T> <=> IEnumerable<T>
    Iterator<T> <=> IEnumerator<T>
    

    【讨论】:

      【解决方案3】:

      Iterable &lt;T&gt;

      【讨论】:

        【解决方案4】:

        我相信 Java 等价物是 Iterable&lt;String&gt;。虽然String[] 没有实现它,但无论如何你都可以循环遍历元素:

        String[] strings = new String[]{"this", "that"};
        for (String s : strings) {
            // do something
        }
        

        如果你真的需要实现Iterable&lt;String&gt;的东西,你可以这样做:

        String[] strings = new String[]{"this", "that"};
        Iterable<String> stringIterable = Arrays.asList(strings);
        

        【讨论】:

          【解决方案5】:

          Iterable&lt;T&gt; 可以,但是有个小问题。它不能在stream() 即 lambda 表达式中轻松使用。

          如果你想这样做,你应该得到它的分裂器,并使用类StreamSupport()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-11
            • 2010-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-13
            相关资源
            最近更新 更多