Re: How to compute the number of occurance of each element in an array list?
"John" <rds1226@sh163.net> writes:
How can I have the result as:
(a,b): 2
(b,c), 2
(c,d,e):3
(a,d,e):1
And, adding to my previous two questions:
Which rule determines the sorting order for tuples
of the same length?
~~
The following program is using my GPLd library ?ram.jar?
for the tuple type:
class NumericMapUtils
{ public static <D> void addTo
( final java.util.Map<D,java.lang.Integer> map, final D d, final int i )
{ map.put( d, i +( map.containsKey( d )? map.get( d ): 0 )); }}
public class Main
{ static de.dclj.ram.type.tuple.ComparableTuple
<de.dclj.ram.type.tuple.DefaultComparableTuple>
tuple( java.lang.Comparable ... args ) { return new
de.dclj.ram.type.tuple.DefaultComparableTuple( args ); }
public static void main( final java.lang.String[] args )
{ final java.util.Map
<de.dclj.ram.type.tuple.ComparableTuple,java.lang.Integer> map =
new java.util.TreeMap
<de.dclj.ram.type.tuple.ComparableTuple,java.lang.Integer>();
NumericMapUtils.addTo( map, tuple( 'a', 'b' ), 1 );
NumericMapUtils.addTo( map, tuple( 'b', 'c' ), 1 );
NumericMapUtils.addTo( map, tuple( 'a', 'b' ), 1 );
NumericMapUtils.addTo( map, tuple( 'b', 'c' ), 1 );
NumericMapUtils.addTo( map, tuple( 'c', 'd', 'e' ), 1 );
NumericMapUtils.addTo( map, tuple( 'a', 'd', 'e' ), 1 );
NumericMapUtils.addTo( map, tuple( 'c', 'd', 'e' ), 1 );
NumericMapUtils.addTo( map, tuple( 'c', 'd', 'e' ), 1 );
for( final de.dclj.ram.type.tuple.ComparableTuple d : map.keySet() )
java.lang.System.out.println( d.toString() + map.get( d )); }}
The output is
( a; b )2
( a; d; e )1
( b; c )2
( c; d; e )3
~~
Here is a program in Java SE not using my library, and
a somewhat more specialized ?NumericMap? class.
It also uses another sorting method for the output.
class NumericMap
{ final java.util.Map
<java.lang.String,java.lang.Integer> map =
new java.util.TreeMap
<java.lang.String,java.lang.Integer>();
public void increment
( final char ... a )
{ final java.lang.String s = a.length + java.util.Arrays.toString(a);
map.put( s, 1 +( map.containsKey( s )? map.get( s ): 0 )); }
public void print()
{ for( final java.lang.String d : map.keySet() )
java.lang.System.out.println( d.toString() + map.get( d )); }}
public class Main
{
public static void main( final java.lang.String[] args )
{ NumericMap numericMap = new NumericMap();
numericMap.increment( 'a', 'b' );
numericMap.increment( 'b', 'c' );
numericMap.increment( 'a', 'b' );
numericMap.increment( 'b', 'c' );
numericMap.increment( 'c', 'd', 'e' );
numericMap.increment( 'a', 'd', 'e' );
numericMap.increment( 'c', 'd', 'e' );
numericMap.increment( 'c', 'd', 'e' );
numericMap.print(); }}
The output is:
2[a, b]2
2[b, c]2
3[a, d, e]1
3[c, d, e]3