小编Rad*_*def的帖子

.collect是否保证在并行流上排序?

鉴于我有一个字符串列表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)

java list java-8

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

Java Generics Puzzler,扩展一个类并使用通配符

我一直在打击这个问题一段时间,并认为可能会有一些新鲜的眼睛看到这个问题; 谢谢你的时间.

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>在最后一行中指定的原因.

java generics bounded-wildcard

51
推荐指数
3
解决办法
1592
查看次数

如何在Java中对二维数组进行深层复制?

我只是.clone()在我的2d boolean阵列上使用,认为这是一个深层复制.

如何执行boolean[][]阵列的深层复制?

我应该循环它并做一系列System.arraycopy的吗?

java arrays copy deep-copy multidimensional-array

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

获取枚举值作为Java 8中的String列表

是否有任何Java 8方法或简单方法,它将Enum值作为String列表返回,如:

List<String> sEnum = getEnumValuesAsString();
Run Code Online (Sandbox Code Playgroud)

java enums java-8

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

Java 8数组构造函数引用如何工作?

假设我们有一个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>(...),这只是一个具有特殊含义的方法.

这对数组有什么用处,看到有构造数组的特殊指令?

java arrays java-8 method-reference

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

打印阵列没有括号和逗号

我正在将一个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 arrays collections android list

40
推荐指数
7
解决办法
13万
查看次数

Java - char,int转换

在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)

java int type-conversion char variable-assignment

39
推荐指数
1
解决办法
2万
查看次数

枚举常量特定的类体是静态的还是非静态的?

我有一个枚举类型:

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)

java enums static anonymous-inner-class

33
推荐指数
4
解决办法
2343
查看次数

为什么带绑定的泛型方法可以返回任何类型?

为什么以下代码编译?该方法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.

java generics type-inference generic-method

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

ArrayList <Integer>接受String

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]

你不能直接添加StringArrayList<Integer> ar,但通过使用addAll()是可能的.

我们如何可以添加StringArrayList其类型已经被指定为Integer?任何人都可以突出显示清晰的实施细节和背后的原因吗

java generics collections arraylist raw-types

32
推荐指数
4
解决办法
2213
查看次数