Jacob
Jacob

Reputation: 14741

Java Collection with index, key and value

My question might sound silly, but would like to know whether there are any Collection object in Java that does store index,key and values in a single Collection object?

I have the following:

Enumeration hs = request.getParameterNames();
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
while (hs.hasMoreElements()) {
    linkedHashMap.put(value, request.getParameter(value));
}

The above stores key and value in linkedHashMap, but it doesn't have an index. If it has then I could call by index(pos) and get corresponding key and value.

Edit 1

I would want to conditionally check if index(position) is x then get the corresponding key and value pair and construct a string with query.

Upvotes: 4

Views: 7681

Answers (3)

jayantS
jayantS

Reputation: 837

As mentioned by others, Java collections does not support this. A workaround is Map<R, Map<C, V>>. But it is too ugly to use. You can go with Guava. It provides a Table collection type. It has the following format Table<R, C, V>. I haven't tried this but I think this will work for you.

Enumeration hs = request.getParameterNames();
Table<Integer, String, String> table = HashBasedTable.create();
while (hs.hasMoreElements()) {
    table.put(index, value, request.getParameter(value));
}

Now, if you want key, value pair at, let's say, index 1. Just do table.row(1). Similarly, to get index, value pairs just do table.column(value).

Upvotes: 3

Howard
Howard

Reputation: 4604

Maybe you need implementing yourself for achieving this functionality.

public class Param{
    private String key;
    private String value;
    public Param(String key, String value){
        this.key = key;
        this.value = value;
    }
    public void setKey(String key){
        this.key = key;
    }
    public String getKey(){
        return this.key;
    }

    public void setValue(String value){
        this.value = value;
    }
    public String getValue(){
        return this.value;
    }
}

Enumeration hs = request.getParameterNames();
List<Param> list = new ArrayList<Param>();
while (hs.hasMoreElements()) {
    String key = hs.nextElement();
    list.add(new Param(key, request.getParameter(key)));
}

By doing this, you could get param with an index provided by List API.

Upvotes: 1

Raghu
Raghu

Reputation: 1393

No Collection in java, will support this. You need to create a new class IndexedMap inheriting HashMap and store the key object into the arraylist by overriding put method.

here is the answer(answerd by another user: Adriaan Koster)

how to get the one entry from hashmap without iterating

Upvotes: 1

Related Questions