我有以下表格中的对象列表
Person object with attributes and values
name=x, state=va
name=x, state=nj
name=x, state=va
name=x, state=va
name=x, state=md
name=x, state=va
我想将唯一的状态值作为数组或列表来查找。 Google集合或Java是否提供此功能?或者我是否必须遍历所有对象并找到唯一的状态值?
答案 0 :(得分:6)
是的,你必须循环。唯一值的最佳集合是Set,但如果您真的需要List或数组,则可以随后转换Set:
Set<String> statesAsSet = new HashSet<String>();
for (Person p : persons) {
statesAsSet.add(p.getState());
}
// if yo want a list:
List<String> statesAsList = new ArrayList<String>(statesAsSet);
// if you want an array:
String[] statesAsArray = statesAsSet.toArray(new String[statesAsSet.size()]);
您应该阅读Java collections tutorial。这是必须知道的。
答案 1 :(得分:1)
Personal
课程中实施equals
。Set
, from the List
List
我知道你可以循环和比较并做其他答案中提到的东西。我只是提到了不涉及循环的方法。
答案 2 :(得分:1)
使用Guava(Google Collections)执行此操作的“功能”方式可能是这样的:
Set<State> uniqueStates = Sets.newHashSet(
Iterables.transform(persons, new Function<Person, State>() {
@Override public State apply(Person person) {
return person.getState();
}
));
答案 3 :(得分:1)
很久以前就回答了这个问题。对于使用Java 8或更高版本的未来读者,您可以使用Streams API查找state
列表中的所有唯一person
值。
List<String> uniqueStates = persons.stream()
.map(Person::getState)
.distinct()
.collect(toList());
这里要注意的关键是distinct()
操作。来自java docs:
返回由此流的不同元素(根据Object.equals(Object))组成的流。