相关疑难解决方法(0)

将Java数组转换为Iterable

我有一个基元数组,例如int,int [] foo.它可能是一个小型的,或不是.

int foo[] = {1,2,3,4,5,6,7,8,9,0};
Run Code Online (Sandbox Code Playgroud)

从中创建一个最好的方法是Iterable<Integer>什么?

Iterable<Integer> fooBar = convert(foo);
Run Code Online (Sandbox Code Playgroud)

笔记:

请不要回答使用循环(除非你可以很好地解释编译器如何对它们做一些聪明的事情?)

另请注意

int a[] = {1,2,3};
List<Integer> l = Arrays.asList(a);
Run Code Online (Sandbox Code Playgroud)

甚至不会编译

Type mismatch: cannot convert from List<int[]> to List<Integer>
Run Code Online (Sandbox Code Playgroud)

还要检查 为什么数组不能分配给Iterable? 在回答之前.

此外,如果你使用一些库(例如,番石榴),请解释为什么这是最好的.(因为它来自谷歌不是一个完整的答案:P)

最后,由于似乎有关于此的功课,避免发布家庭作业代码.

java arrays iterable

135
推荐指数
6
解决办法
14万
查看次数

Java Arrays&Generics:Java等价于C#IEnumerable <T>

所以在C#中,我可以将a string[]视为一个IEnumerable<string>.

是否有Java等价物?

java arrays generics

45
推荐指数
3
解决办法
3万
查看次数

为什么不在Java中编译"array instanceof Iterable"?

Object[] array = new Object[]{};
System.out.println((array instanceof Serializable));//passed
System.out.println((array instanceof Cloneable));//passed
Run Code Online (Sandbox Code Playgroud)

此代码编译并运行.输出是:

true
true
Run Code Online (Sandbox Code Playgroud)

但是,此代码无法编译:

System.out.println((array instanceof Iterable));//not passed
Run Code Online (Sandbox Code Playgroud)

Eclipse编译器报告:

不兼容的条件操作数类型Object []和Iterable

我发现只能在接口SerializableCloneable使用操作之间比较数组instanceof.有人可以告诉我为什么吗?

java arrays compiler-errors

16
推荐指数
2
解决办法
1770
查看次数

让java函数接受集合或数组

我正在尝试编写一个函数,它接受一些字符串并对它们做一些事情.

我要做的唯一事情是字符串集循环遍历它们.现在,我最终得到了一条笨拙的构造

public void foo(String[] myStrings){
    foo(java.util.Arrays.asList(myStrings));
}

public void foo(Iterable<String> myStrings){
    for(String i : myStrings){
        bar(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

从那以后感到多余

for(String i : myStrings){
    bar(i);
}
Run Code Online (Sandbox Code Playgroud)

对于String []类型的myStrings来说,它将是完全有效的代码.

是否有一个我可以接受foo的类,它将允许集合和数组?

java arrays collections function-declaration

11
推荐指数
1
解决办法
1941
查看次数

Java:一个构造函数或方法,它将接受数组或集合或列表或...?

在Java中有没有一个构造函数可以接受数组或集合?我一直在摆弄这个问题,但我不认为这是可能的.

我想能够初始化MyClass,像这样:

MyClass c = new MyClass({"rat", "Dog", "Cat"});
Run Code Online (Sandbox Code Playgroud)

像这样:

LinkedList <String> l = new <String> LinkedList();
l.add("dog");
l.add("cat");
l.add("rat");
MyClass c = new MyClass(l);
Run Code Online (Sandbox Code Playgroud)

这就是MyClass的样子.我可以做什么使XXX成为可行的?我知道我可以重载构造函数,但是如果我可以最小化那些非常棒的代码呢?

public class MyClass{

   private LinkedHashSet <String> myList;

   public MyClass(XXX <String> input){
       myList = new LinkedHashSet <String> ();
       for(String s : input){
           myList.put(s);
       }

   }

}
Run Code Online (Sandbox Code Playgroud)

java arrays collections constructor list

5
推荐指数
1
解决办法
5976
查看次数

在Java中,数组继承了什么?我可以这样做吗?

对不起新手问题,我习惯了C#,所以我的Java框架知识不太好.

我有几个数组:

int[] numbers = new int[10];
String[] names = new String[10];

//populate the arrays
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个泛型函数,它将打印出这些数组中的值,如下所示(这应该适用于C#)

private void PrintAll(IEnumerable items)
{    
    foreach(object item in items)       
        Console.WriteLine(item.ToString());
} 
Run Code Online (Sandbox Code Playgroud)

我现在所要做的就是

PrintAll(names);
PrintAll(numbers);
Run Code Online (Sandbox Code Playgroud)

我怎么能用Java做到这一点?Java中数组的继承树是什么?

非常感谢

骨头

c# java arrays

4
推荐指数
1
解决办法
1453
查看次数

生成布尔流

你如何创建Boolean.FALSE长度为100的流?

我一直在努力的是:

  1. 本来我打算创建一个数组Boolean.FALSE.但是new Boolean[100]返回一个数组NULL.所以我合理地考虑使用流API作为方便Iterable且几乎(1)的Iterable操作工具;
  2. 没有Booleanno-params构造函数(2),因此我不能使用Stream.generate(),因为它接受Supplier<T>(3).

我发现的是Stream.iterate(Boolean.FALSE, bool -> Boolean.FALSE).limit(100);给我想要的东西,但它似乎不是很优雅的解决方案,恕我直言.

还有一个选择,我发现(4)是IntStream.range(0, 100).mapToObj(idx -> Boolean.FALSE);,在我看来更奇怪.

尽管这些选项不违反流API的管道概念,有没有更简洁的方法来创建流Boolean.FALSE

java java-8 java-stream

4
推荐指数
2
解决办法
501
查看次数

为什么列表不能包含在`Integer ...'参数中

这是我想要做的:

public void add(Integer... newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但我不能ArrayList<Integer>在方法中加入.

我很高兴只是复制列表的方法,但我认为必须有一个更有效的方法.

我尝试了下面的想法,我可以为catch块做你能做的事情:

public void add(Integer... | List<Integer> newIntegers) {
    for (Integer i : newIntegers) {
        integers.add(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,在快速StackOverfow之后,发现它是不可能的.还有其他方法吗?

java arrays parameters methods list

3
推荐指数
1
解决办法
67
查看次数

我可以迭代Java中for循环中定义的数组吗?

Java是否提供了一种方法来执行类似下面的操作,而无需在单独的变量中声明数组?

for (String s : {"HEY", "THERE"}) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的是:

for (String s : new ArrayList<String>() {{ add("HEY"); add("THERE"); }}) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这不漂亮.

java arrays for-loop

2
推荐指数
2
解决办法
74
查看次数

1
推荐指数
1
解决办法
862
查看次数