6680235: (collection) Object count method.
Leszek Sliwko
lsliwko at gmail.com
Wed Sep 17 14:24:25 UTC 2008
Hello,
I hope I'm on right dev list and I'm posting it as it supposed to be posted.
There is a RFE:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6680235
"A DESCRIPTION OF THE REQUEST :
Java Lists currently do not have a way of getting the count of a
particular customer within a List.
JUSTIFICATION :
I ran into this issue when I had a list of objects in which it
contained some duplicates, and I needed to know the number of
occurrences of specific objects within the list. Basically i built a
list of referenced objects from a list of objects and needed the
result of how many times a specific referenced customer was in this
built list, for later use.
I needed something like... myList.elementCount(obj);
where elementCount() returns int number of occurrences or -1 if it
does not exist in the list, and obj is the assumed element in the
list.
I was able to continue by creating a custom iterator, but the above
alternative would have been a quicker solution.
Posted Date : 2008-03-26 12:31:26.0"
I see we can do the following:
1) add a method to java.util.AbstractCollection:
/**
* Returns the amount of specified element in this collection. If the
* collection contains more than <tt>Integer.MAX_VALUE</tt> occurrences
of
* specified element, returns <tt>Integer.MAX_VALUE</tt>.
*
* This implementation iterates over the elements in the collection,
* checking each element in turn for equality with the specified
element.
*
* @param o object to be counted for in this collection.
* @return the amount of specified element in this collection.
*/
public int elementCount(Object o) {
Iterator e = iterator();
int count = 0;
if (o==null) {
while (e.hasNext()) {
if (e.next()==null) {
if (count<Integer.MAX_VALUE) {
count++;
} else break;
}
}
} else {
while (e.hasNext()) {
if ((o.equals(e.next())&&(count<Integer.MAX_VALUE))) {
if (count<Integer.MAX_VALUE) {
count++;
} else break;
}
}
}
return count;
}
2) add a method definition to interface java.util.Collection:
/**
* Returns the amount of specified element in this collection. If the
* collection contains more than <tt>Integer.MAX_VALUE</tt> occurrences
of
* specified element, returns <tt>Integer.MAX_VALUE</tt>.
*
* This implementation iterates over the elements in the collection,
* checking each element in turn for equality with the specified
element.
*
* @param o object to be counted for in this collection.
* @return the amount of specified element in this collection.
*/
public int elementCount(Object o);
3) The java.util.AbstractSet can be optimized:
public int elementCount(Object o) {
if (contains(o)) {
return 1;
} else return 0;
}
any inputs/thoughts?
Thanks
--
All of best,
Leszek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20080917/02ebfc5d/attachment.html>
More information about the core-libs-dev
mailing list