Skip to main content

Different ways to use enum's in java

Technique: Simple enum and retrieve/reverse lookup using valueOf()

public class OrderService {
    // Note : enums can be defined in its own file or inside a class if they are only relevant with it.
    public enum Status { PROCESSING, SHIPPED, COMPLETED; }

    public void update(long orderId, Status status) {
         // something
// import static OrderService.Status;
// import static OrderService.Status.* ;
// OrderService service = new OrderService();
// service.update(100L, SHIPPED); // use enum
// Status status = Status.valueOf("SHIPPED"); // reverse lookup by constant, throws IllegalArgumentException if no match.
// System.out.println ( status.toString() ); // prints value - SHIPPED

Technique: Stores enum constant and value in a map, retrieve/reverse lookup using fromValue()

public enum Status {

        PROCESSING("processing"), SHIPPED("shipping"), COMPLETED("completed");
        private String val;
        private Status(String val) {
            this.val = val;
        private static Map map = new HashMap<>();
        static {
            for ( Status status : values()) {
                map.put(status.val, status);
        static Status fromValue(String val) {
            return map.get(val);

Technique: fromValue() returns default enum for no match.

public enum Status {
   public static Status fromValue(String status) {
      try {
         Status status = valueOf(status);
         return status;
      } catch (IllegalArgumentException e) {
         return UNRECOGNIZED;

Technique: loop every time fromValue() is called

   public enum Status {

        int val;
        Status(val) { this.val = val }

        static Status fromValue(int val) {
            // iterate and match value
            // If this block is executed a ton of times its better to use Map from the above technique.
            for (int s : Status.values()) {
                if (s == val ) {
                    return s;
            // throw exception or return a default enum or return null
            throw new IllegalArgumentException(val);


Popular posts from this blog

JPA 2 new feature @ElementCollection explained

@ElementCollection is new annotation introduced in JPA 2.0, This will help us get rid of One-Many and Many-One shitty syntax.

Example 1: Stores list of Strings in an Entity

public class Users implements Serializable {

    private static final long serialVersionUID = 1L;
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private List<String> certifications = new ArrayList<String>();

    public Long getId() {
        return id;

    public void setId(Long id) { = id;

    public List<String> getCertifications() {
        return certifications;

    public void setCertifications(List<String> certifications) {
        this.certifications = certifications;

        Users u = new Users();
        u.getCertifications().add("Sun Certified Java Programmer");

Generated Tables

Column --> ID
    Row             1


ArrayList vs LinkedList vs HashSet Performance Comparision

ConclusionsInserting & Reading sequentially from Collection prefer LinkedList/ArrayListInserting & Reading/Deleting by Search/equals from Collection prefer HashSetInserting, ArrayList & LinkedList performs best while HashSet takes double the timeReading, HashSet performs best while ArrayList & LinkedList are marginally lessDeleting, HashSet performs 10 times better than ArrayList & ArrayList performs 4 times better than LinkedList. LinkedList is slow because of sequencial search Bottom line : unless you are not going to iterate using for(Integer i : list ) then prefer HashSet
Inserting/Reading/Deleting integer's from zero till countJDK7Collectionactioncounttime msArrayListInsert1000/1LinkedListInsert1000/1HashSetInsert1000/1ArrayListInsert100005LinkedListInsert100004HashSetInsert100007ArrayListInsert10000011LinkedListInsert10000011HashSetInsert10000021ArrayListGet/Read1000LinkedListGet/Read1000HashSetGet/Read1000ArrayListGet/Read100004LinkedListGet/Read100003Has…

Validating CSV Files

What is CsvValidator ?
  A Java framework which validates any CSV files something similar to XML validation using XSD.

Why should I use this ?
  You don't have to use this and in fact its easy to write something your own and also checkout its source code for reference.

Why did I write this ?
  Some of our projects integrate with third party application which exchanges information in CSV files so I thought of writing a generic validator which can be hooked in multiple projects or can be used by QA for integration testing.

What is the license clause ?

Are there any JUnit test cases for me checkout ?
 Yes, source

How to integrate in my existing project ?

Just add the Jar which can be downloaded from here CsvValidator.jar and you are good.

Instantiate CsvValidator constructor which takes these 3 arguements

         // filename is the the file to be validated and here is a sample         // list - defines all the fields in the above csv file ( a field has index, type, isOptional, rege…