Apache POI – 提取列中的所有不同值

我有一个像这样的excel文件 –

Ticket # Status Person 1. Open John 2. Working Mark 3. Pending Betty 4. Working Mark 5. Open Mark 6. Open John 7. Pending Betty 8. Working John 9. Working Mark 10. Pending Betty 

我想提取以下信息

  1. 所有不同的人的名字(在第3列,在这种情况下 – 约翰,马克和贝蒂)。

  2. 一个人有多less张票a。打开b。工作c.Pending。 (例如 – 对于约翰,2票是开放的,1是工作,0是待定)。

我正在使用Apache POI,请build议,我如何才能获得上述信息。

尝试使用此类逐行加载。

 public class Person{ private String name; private Map<TypeOfTicket,Integer> tickets; //Implements equals based on name property } public enum TypeOfTicket{ Pending, Open, Working } 

Cell有一个方法来返回string,创build一个实现来读取名称,如果你没有在你的列表中创build新的对象,如果你已经添加一个票据types的计数。

 List<Person> persons = new ArrayList<Person>(); String personName =cell.getStringCellValue(); if(person.contains(new Person(personName){ //Add logic here to obtain the person object and read the type of the ticket and add one. } 

添加人物对象应该照顾你存储信息的方式,但是你需要逐个获取值。

获取你的问题的信息只是。

 persons.size(); 

 person.get(new Person("personName")).getTickets().get(TypeOfTicket) 

如果你想要一个数据结构的所有唯一成员,你可以使用一个TreeSet ,完全是为了这个目的:

 A collection that contains no duplicate elements. The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used. 

定义你的Comparator和hashCode方法,区分名字 – 第三列,它会做你想要的。