java—如何将存储在字符串数组中的特定字符串打印到字符串数组的arraylist中?

wecizke3  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(388)

所以,根据这个问题,我用java编写了以下代码:

public class example {
    static ArrayList<String[]> test = new ArrayList<String[]>();
    private String[] a = {"this", "is,", "a test"};
    private String[] b = {"Look", "a three-headed", "monkey"};

    public void fillTest() {
        test.add(a);
        test.add(b);
        // so far so good, I checked this method
        // with a System.out.print and it works
    }

    // later in the code I have a method that try
    // to take the arrayList test and copy it into
    // a String[] named temp. In my vision temp
    // should than be accessed randomly by the
    // method itself and the content printed out
    // from temp should be removed from test -
    // that's why I'm using an ArrayList

    public void stuff() {
        // some stuff
        // runtime error happens here:
        String[] temp = test.toArray(new String[test.size()]);
        // other stuff that never made it to runtime
    }
}

问题是,虽然编译器对此没有任何异议,但在运行时,我得到以下错误:
线程“main”java.lang.arraystoreexception中出现异常:arraycopy:元素类型不匹配:无法将java.lang.object[]的元素之一强制转换为目标数组java.lang.string的类型
我无法理解背后的原因-在我看来,我要求它用字符串填充字符串数组,那么为什么会出现错误呢?

2uluyalo

2uluyalo1#

你可以用 Stream.flatMap 方法来展平此字符串数组列表,并在单个字符串数组上获取流。然后你可以得到一个包含这个流元素的数组:

List<String[]> test = Arrays.asList(
        new String[]{"this", "is,", "a test"},
        new String[]{"Look", "a three-headed", "monkey"});

String[] temp = test
        // return Stream<String[]>
        .stream()
        // return Stream<String>
        .flatMap(arr -> Arrays.stream(arr))
        // return an array of a specified size
        .toArray(size -> new String[size]);

System.out.println(Arrays.toString(temp));
// [this, is,, a test, Look, a three-headed, monkey]

另请参阅:是否有任何方法可以仅使用“map”而不使用“flatmap”将2d列表转换为1d列表?

gojuced7

gojuced72#

您正在尝试转换 List 其元素是 String 数组的元素 String s。这不起作用,因为 String 不是一个 String .
相反,您可以将 List 数组到二维数组 String 学生:

String[][] temp = test.toArray(new String[test.size()][]);

如果要将 List 在单个数组中 String ,你必须做一些处理。与 Stream 可通过以下方式完成:

String[] temp = test.stream().flatMap(Arrays::stream).toArray(String[]::new);

相关问题