Java Arrays & Generics : Java Equivalent to C# IEnumerable

前端 未结 5 1057
小鲜肉
小鲜肉 2020-12-15 15:12

So in C#, I can treat a string[] as an IEnumerable.

Is there a Java equivalent?

相关标签:
5条回答
  • 2020-12-15 15:32

    Iterable<T> is OK, but there is a small problem. It cannot be used easily in stream() i.e lambda expressions.

    If you want so, you should get it's spliterator, and use the class StreamSupport().

    0 讨论(0)
  • 2020-12-15 15:51

    Iterable <T>

    0 讨论(0)
  • 2020-12-15 15:53

    I believe the Java equivalent is Iterable<String>. Although String[] doesn't implement it, you can loop over the elements anyway:

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

    If you really need something that implements Iterable<String>, you can do this:

    String[] strings = new String[]{"this", "that"};
    Iterable<String> stringIterable = Arrays.asList(strings);
    
    0 讨论(0)
  • 2020-12-15 15:57

    Are you looking for Iterable<String>?

    Iterable<T> <=> IEnumerable<T>
    Iterator<T> <=> IEnumerator<T>
    
    0 讨论(0)
  • 2020-12-15 15:58

    Iterable<String> is the equivalent of IEnumerable<string>.

    It would be an odditity in the type system if arrays implemented Iterable. String[] is an instance of Object[], but Iterable<String> is not an Iterable<Object>. Classes and interfaces cannot multiply implement the same generic interface with different generic arguments.

    String[] will work just like an Iterable in the enhanced for loop.

    String[] can easily be turned into an Iterable:

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

    Prefer collections over arrays (for non-primitives anyway). Arrays of reference types are a bit odd, and are rarely needed since Java 1.5.

    0 讨论(0)
提交回复
热议问题