从java中的arraylist获取唯一的值

我有一个ArrayList与一些logging和一个列包含气体名称为二氧化碳CH4 SO2 etc.Now我想检索不同的气体名称(唯一)只有从ArrayList重复。 如何做呢?

你应该使用一个集合 。

一个集合是不包含重复的集合 。

如果你有一个包含重复的列表 ,你可以得到这样的唯一条目:

 List<String> gasList = // create list with duplicates... Set<String> uniqueGas = new HashSet<String>(gasList); System.out.println("Unique gas count: " + uniqueGas.size()); 

注意 :这个HashSet构造函数通过调用元素的equals()方法来标识重复项。

您可以使用Java 8 Stream API 。

方法distinct是一个中间操作 ,用于过滤stream,并只允许distict值(默认情况下使用Object :: equals方法)传递给下一个操作。
我为你的情况写了一个例子,

 // Create the list with duplicates. List<String> listAll = Arrays.asList("CO2", "CH4", "SO2", "CO2", "CH4", "SO2", "CO2", "CH4", "SO2"); // Create a list with the distinct elements using stream. List<String> listDistinct = listAll.stream().distinct().collect(Collectors.toList()); // Display them to terminal using stream::collect with a build in Collector. String collectAll = listAll.stream().collect(Collectors.joining(", ")); System.out.println(collectAll); //=> CO2, CH4, SO2, CO2, CH4 etc.. String collectDistinct = listDistinct.stream().collect(Collectors.joining(", ")); System.out.println(collectDistinct); //=> CO2, CH4, SO2 

我希望我能正确理解你的问题:假设值的types是String ,最有效的方法可能是转换为HashSet并遍历它:

 ArrayList<String> values = ... //Your values HashSet<String> uniqueValues = new HashSet<>(values); for (String value : uniqueValues) { ... //Do something } 
 ArrayList values = ... // your values Set uniqueValues = new HashSet(values); //now unique 

这是直接的方式,而不诉诸自定义比较或类似的东西:

 Set<String> gasNames = new HashSet<String>(); List<YourRecord> records = ...; for(YourRecord record : records) { gasNames.add(record.getGasName()); } // now gasNames is a set of unique gas names, which you could operate on: List<String> sortedGasses = new ArrayList<String>(gasNames); Collections.sort(sortedGasses); 

注意:使用TreeSet而不是HashSet会给直接sorting的ArrayList和以上Collections.sort可以被跳过,但是TreeSet不那么高效,所以即使在需要sorting的时候,使用HashSet通常也是好的,而且很less更坏。

如果你有一个对象(bean)的数组,你可以这样做:

 List<aBean> gasList = createDuplicateGasBeans(); Set<aBean> uniqueGas = new HashSet<aBean>(gasList); 

就像上面说的Mathias Schwarz一样,但是你必须为你的aBean提供方法hashCode()equals(Object obj) ,这些方法可以通过专门的菜单' Generate hashCode() and equals() '在Eclipse中轻松完成类)。 Set将评估重写的方法来区分equals对象。