anupamD
anupamD

Reputation: 952

How should I instantiate List<List<String>> in Java

I have the following code:

            List<List<String>> allData= getData()
            
            if (allData== null)
                allData= new ArrayList<ArrayList<String>>();
            // populate allData below

Now I want to initialize allData but I get Type mismatch: cannot convert from ArrayList<ArrayList<String>> to List<List<String>>. What is the correct way I can initialize this?

It is not possible to return ArrayList<ArrayList<String>> from getData()

Thanks!

Upvotes: 2

Views: 1466

Answers (3)

soumya-kole
soumya-kole

Reputation: 1375

A simple example of getData might be as below -
        
   public static List<List<String>> getData(String fileName){
        List<List<String>> content = null;
        try (Stream<String> lines = Files.lines(Paths.get(fileName ))) {
            content = lines
                    .map(l -> l.split(" "))
                    .map(Arrays::asList)
                    .collect(Collectors.toList());
    
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }

Upvotes: 1

vsfDawg
vsfDawg

Reputation: 1527

You cannot redefine the generic type of the reference when you instantiate the concrete implementation. The reference is List<List<String>> so the assigned List must be capable of accepting any List<String> as an element. When you instantiated your instance, you attempted to limit this to ArrayList<String>.

The explicit solution is:

allData = new ArrayList<List<String>>();

or more simply as:

allData = new ArrayList<>();

Upvotes: 3

You do it very simply:

allData = new ArrayList<>();

Then you can add new lists to allData:

List innerList = new ArrayList<>();
innerList.add("some string");
// .... etc ...
allData.add(innerList);

Upvotes: 9

Related Questions