我有一个基元数组,例如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)
最后,由于似乎有关于此的功课,避免发布家庭作业代码.
所以在C#中,我可以将a string[]视为一个IEnumerable<string>.
是否有Java等价物?
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
我发现只能在接口Serializable和Cloneable使用操作之间比较数组instanceof.有人可以告诉我为什么吗?
我正在尝试编写一个函数,它接受一些字符串并对它们做一些事情.
我要做的唯一事情是字符串集循环遍历它们.现在,我最终得到了一条笨拙的构造
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中有没有一个构造函数可以接受数组或集合?我一直在摆弄这个问题,但我不认为这是可能的.
我想能够初始化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) 对不起新手问题,我习惯了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中数组的继承树是什么?
非常感谢
骨头
你如何创建Boolean.FALSE长度为100的流?
我一直在努力的是:
Boolean.FALSE.但是new Boolean[100]返回一个数组NULL.所以我合理地考虑使用流API作为方便Iterable且几乎(1)的Iterable操作工具;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?
这是我想要做的:
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是否提供了一种方法来执行类似下面的操作,而无需在单独的变量中声明数组?
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 ×10
arrays ×8
collections ×2
for-loop ×2
list ×2
c# ×1
constructor ×1
generics ×1
iterable ×1
java-8 ×1
java-stream ×1
methods ×1
parameters ×1