0

I have a problem. I created the following variable:

TreeMap<String, TreeMap<Long, Customer>> customerCache = new TreeMap<>();

Then I loop over a list with customers and want each customer to be stored in the customerCache, so I made this code:

customerCache.clear();
for (int i = customers.size() - CUSTOMER_CACHE_SIZE; i < customers.size(); i++) {
    String customerKey = "group1";
    customerCache.put(customerKey , Map.of(customers.get(i).getCreatedTime(), customers.get(i)));
}

But that gives me the error on the TreeMap filling line:

Type mismatch: cannot convert from Map<Long,Customer> to TreeMap<Long,Customer>

To fix this I thought I could convert it to this:

customerCache.put(customerKey, (TreeMap<Long, Customer>) Map.of(customers.get(i).getCreatedTime(), customers.get(i)));

Unfortunately, when I run that code I get the next error:

Exception in thread "main" java.lang.ClassCastException: class java.util.ImmutableCollections$Map1 cannot be cast to class java.util.TreeMap (java.util.ImmutableCollections$Map1 and java.util.TreeMap are in module java.base of loader 'bootstrap')

How can I store data in a nested TreeMap

1 Answer 1

1

Map.of just doesn't produce anything compatible to TreeMap. You'll have to write your own creator function and use it in customerCache.put.

private TreeMap<Long, Customer> create(Long id, Customer customer){
    TreeMap<Long, Customer>  result = new TreeMap<>();
    result.put(id, customer);
    return result;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.