Counting by Units
Count class is used for counting by Units.
Usage
import jlibs.core.lang;
// we want to count the time
Count<DurationUnit> duration = Count.newInstance(DurationUnit.class);
// additions
duration.add(500, DurationUnit.SECONDS);
System.out.println(duration); // prints "8 MINUTES 20 SECONDS"
duration.add(100, DurationUnit.MINUTES);
System.out.println(duration); // prints "1 HOURS 48 MINUTES 20 SECONDS"
// get specific unit value
System.out.println(duration.get(DurationUnit.MINUTES); // prints "48"
System.out.println(duration.get(DurationUnit.SECONDS); // prints "20"
// conversions
System.out.println(duration.to(DurationUnit.SECONDS)); // prints "6500.0"
System.out.println(duration.to(DurationUnit.MINUTES)); // prints "108.33333333333333"
// reset to given value
duration.set(500, DurationUnit.SECONDS);
System.out.println(duration); // prints "8 MINUTES 20 SECONDS"
// reset to 0
duration.clear();
System.out.println(duration); // prints "0 NANO_SECONDS"
// adding two counts
Count<DurationUnit> duration1 = Count.newInstance(DurationUnit.class);
duration1.add(500, DurationUnit.SECONDS);
Count<DurationUnit> duration2 = Count.newInstance(DurationUnit.class);
duration2.add(100, DurationUnit.MINUTES);
duration1.add(duration2);
System.out.println(duration1); // prints "1 HOURS 48 MINUTES 20 SECONDS"
// you can count by any unit, for example
Count<SizeUnit> size = Count.newInstance(SizeUnit.class);
size.add(5000, SizeUnit.BYTES);
System.out.println(size); // prints "4 KB 904 BYTES"
You can count by any unit, by providing its definition.
JLibs comes with two units DurationUnit and SizeUnit.
Writing Custom Unit
public enum LengthUnit implements Count.Unit{
MILLI_METERS(10), CENTI_METERS(100), METERS(1000), KILO_METERS(0);
private int count;
private DurationUnit(int count){
this.count = count;
}
@Override
public int count(){
return count;
}
}
- define
enumimplementingCount.Unitinterface enumconstants are ordered from lowest to highest- each
enumconstant provide the count to promote to next enum.
for example:MILLI_METERS(10)means,10millimeters should be promoted to1centimeter
now we are ready to count length:
Count<LengthUnit> size = Count.newInstance(LengthUnit.class);