我有以下形式java找到的獨特屬性的對象列表中的
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提供此功能嗎?還是必須遍歷所有對象並找到唯一的狀態值?
我有以下形式java找到的獨特屬性的對象列表中的
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提供此功能嗎?還是必須遍歷所有對象並找到唯一的狀態值?
是的,你必須循環。唯一值的最佳集合是一組的,但如果你真的想要一個列表或數組,可以隨時變換分析設置算賬:
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。這是一個必須知道的。
Personal
類中實現equals
。Set
, from the List
List
我知道你只是循環和比較,並在其他答覆中提到做的東西。我只是提到了不涉及循環的方法。
10這不必要地改變了'Person'類的相等語義,我建議創建一組新的狀態。 – 2012-03-03 15:00:06
的「功能性」的方式與番石榴(谷歌集合)要做到這一點可能是這樣的:
Set<State> uniqueStates = Sets.newHashSet(
Iterables.transform(persons, new Function<Person, State>() {
@Override public State apply(Person person) {
return person.getState();
}
));
的問題已經是很久以前的回答。對於將來使用Java 8或更高版本的讀者,可以使用Streams API從person
列表中查找所有唯一的state
值。
List<String> uniqueStates = persons.stream()
.map(Person::getState)
.distinct()
.collect(toList());
這裏需要注意的關鍵是distinct()
操作。來自java文檔:
返回由此流的不同元素(根據Object.equals(Object))組成的流。
你可以循環它們。或者,如果這是一種常見的訪問模式,想出一個比列表更好的方式來存儲數據。 – 2012-03-03 14:58:18