从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对象。