Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
202 views
in Technique[技术] by (71.8m points)

java - Converting List<List<Integer>> to int[][]

I am writing a method which converts Integer data type from a List of Lists, to a primitive array of arrays, type int[][].

Question

Is there any way to convert Integer to int using Java API?

For your information, int[] set will be used for other purposes so please ignore.

What I have found

Apache Commons API "toPrimitive" method converts Integer to int type. However, I'm only looking for solutions using native java API.

This is my code so far

class Test {
    int[][] convert(int[] set) {
        List<List<Integer>> ll = new ArrayList<List<Integer>>();
        ll.add(new ArrayList<Integer>());
        ll.add(new ArrayList<Integer>());
        ll.add(new ArrayList<Integer>());
        ll.get(0).add(1);
        ll.get(0).add(2);
        ll.get(1).add(2);
        ll.get(2).add(3);

        System.out.println(ll + " " + ll.size());

        int[][] tempArray = new int[0][0];
        for (int i = 0; i < ll.size(); i++) {
            for (int j = 0; j < ll.get(i).size(); j++) {
                tempArray[i][j] = ll.get(j);
            }
        }
        return tempArray;
    }
}

Expected results

List entry: [[1,2],[2],[3]]
return: {{1,2},{2},{3}}

Errors

tempArray[i][j] = ll.get(j);

returns java.util.List<java.lang.Integer> cannot be converted to int.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To answer your exact question, yes an Integer can be converted to an int using the intValue() method, or you can use auto-boxing to convert to an int.

So the innermost part of your loop could be either of these:

tempArray[i][j] = ll.get(i).get(j).intValue();
tempArray[i][j] = ll.get(i).get(j);

However, we can also take a different strategy.

As a modification of this answer to a similar question, in Java 8 you can use Streams to map to an integer array. This structure just requires an extra layer of mapping.

List<List<Integer>> list = new ArrayList<>();

int[][] arr = list.stream()
    .map(l -> l.stream().mapToInt(Integer::intValue).toArray())
    .toArray(int[][]::new);

Ideone Demo


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...