鉴于我有一个字符串列表List<String> toProcess.结果必须按原始线的顺序排列.我想利用新的并行流.
以下代码是否保证结果与原始列表中的顺序相同?
// ["a", "b", "c"]
List<String> toProcess;
// should be ["a", "b", "c"]
List<String> results = toProcess.parallelStream()
.map(s -> s)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 我一直在打击这个问题一段时间,并认为可能会有一些新鲜的眼睛看到这个问题; 谢谢你的时间.
import java.util.*;
class Tbin<T> extends ArrayList<T> {}
class TbinList<T> extends ArrayList<Tbin<T>> {}
class Base {}
class Derived extends Base {}
public class Test {
public static void main(String[] args) {
ArrayList<Tbin<? extends Base>> test = new ArrayList<>();
test.add(new Tbin<Derived>());
TbinList<? extends Base> test2 = new TbinList<>();
test2.add(new Tbin<Derived>());
}
}
Run Code Online (Sandbox Code Playgroud)
使用Java 8.在我看来,直接创建容器test就等同于容器test2,但编译器说:
Test.java:15: error: no suitable method found for add(Tbin<Derived>)
test2.add(new Tbin<Derived>());
^
Run Code Online (Sandbox Code Playgroud)
我怎么写Tbin,TbinList所以最后一行是可以接受的?
请注意,我实际上将添加类型Tbins,这就是我Tbin<Derived>在最后一行中指定的原因.
我只是.clone()在我的2d boolean阵列上使用,认为这是一个深层复制.
如何执行boolean[][]阵列的深层复制?
我应该循环它并做一系列System.arraycopy的吗?
是否有任何Java 8方法或简单方法,它将Enum值作为String列表返回,如:
List<String> sEnum = getEnumValuesAsString();
Run Code Online (Sandbox Code Playgroud) 假设我们有一个IntFunction返回整数数组的变量:
IntFunction<int[]> i;
Run Code Online (Sandbox Code Playgroud)
使用Java 8泛型,可以使用如下构造函数引用初始化此变量:
i = int[]::new
Run Code Online (Sandbox Code Playgroud)
Java编译器如何将其转换为字节码?
我知道对于其他类型,例如String::new,它可以使用invokedynamic指向String构造函数的指令java/lang/String.<init>(...),这只是一个具有特殊含义的方法.
这对数组有什么用处,看到有构造数组的特殊指令?
我正在将一个Hangman游戏移植到Android并遇到了一些问题.最初的Java程序使用了控制台,所以现在我必须以某种方式美化输出,使其适合我的Android布局.
如何在没有括号和逗号的情况下打印数组?该数组包含斜杠,并在猜到正确的字母时逐个替换.
我正在使用类的常用.toString()函数,ArrayList我的输出格式如下:[ a, n, d, r, o, i, d ].我希望它只是简单地将数组打印出来String.
我用这段代码填充数组:
List<String> publicArray = new ArrayList<>();
for (int i = 0; i < secretWordLength; i++) {
hiddenArray.add(secretWord.substring(i, i + 1));
publicArray.add("-");
}
Run Code Online (Sandbox Code Playgroud)
我打印它像这样:
TextView currentWordView = (TextView) findViewById(R.id.CurrentWord);
currentWordView.setText(publicArray.toString());
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
在Java中,允许以下内容:
char c = 'A' + 1;
Run Code Online (Sandbox Code Playgroud)
这里,c将保持值'B'.在上面,首先评估表达式.所以'A'被转换为65,整个表达式的计算结果为66,然后66被转换为'B',因为我们将值存储在char中.
但是,以下内容会产生编译时错误:
char c = 'A';
c = c + 1;
Run Code Online (Sandbox Code Playgroud)
Java如何以不同方式查看表达式的解释是什么?顺便说一句,以下工作也很好:
char c = 'A';
c++;
Run Code Online (Sandbox Code Playgroud) 我有一个枚举类型:
public enum Operation {
PLUS() {
@Override
double apply(double x, double y) {
// ERROR: Cannot make a static reference
// to the non-static method printMe()...
printMe(x);
return x + y;
}
};
private void printMe(double val) {
System.out.println("val = " + val);
}
abstract double apply(double x, double y);
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我定义了一种enum有价值的类型PLUS.它包含一个不变的特定体.在它的正文中,我试着打电话 printMe(val);,但我得到了编译错误:
无法对非静态方法printMe()进行静态引用.
为什么我会收到此错误?我的意思是我在PLUS体内覆盖了抽象方法.为什么它在static范围内?如何摆脱它?
我知道添加一个static关键字来printMe(){...}解决问题,但我有兴趣知道如果我想保持printMe()非静态是否还有其他方法?
另一个问题,与上面的问题非常类似,但这次错误消息反过来说,即PLUS(){...}具有非静态上下文:
public enum Operation {
PLUS() …Run Code Online (Sandbox Code Playgroud) 为什么以下代码编译?该方法IElement.getX(String)返回该类型IElement或其子类的实例.类中的代码Main调用该getX(String)方法.编译器允许将返回值存储到类型的变量中Integer(显然不在层次结构中IElement).
public interface IElement extends CharSequence {
<T extends IElement> T getX(String value);
}
public class Main {
public void example(IElement element) {
Integer x = element.getX("x");
}
}
Run Code Online (Sandbox Code Playgroud)
返回类型是否仍然是一个实例IElement - 即使在类型擦除之后?
该getX(String)方法的字节码是:
public abstract <T extends IElement> T getX(java.lang.String);
flags: ACC_PUBLIC, ACC_ABSTRACT
Signature: #7 // <T::LIElement;>(Ljava/lang/String;)TT;
Run Code Online (Sandbox Code Playgroud)
编辑:替换String与一致Integer.
public class Main {
public static void main(String[] args) {
ArrayList<Integer> ar = new ArrayList<Integer>();
List l = new ArrayList();
l.add("a");
l.add("b");
ar.addAll(l);
System.out.println(ar);
}
}
Run Code Online (Sandbox Code Playgroud)
输出: [a,b]
你不能直接添加String到ArrayList<Integer> ar,但通过使用addAll()是可能的.
我们如何可以添加String到ArrayList其类型已经被指定为Integer?任何人都可以突出显示清晰的实施细节和背后的原因吗