的名單得到龍的名單上有以下有屬性 -如何從對象
private Long personId;
private String personName;
I want to get List<Long> from List<Person>
我想避免循環直通對象列表Person對象。如果有其他方式,請提出建議。
的名單得到龍的名單上有以下有屬性 -如何從對象
private Long personId;
private String personName;
I want to get List<Long> from List<Person>
我想避免循環直通對象列表Person對象。如果有其他方式,請提出建議。
您可以使用第三方單位完成目標:com.google.common.collect.Collections2.transform(集合,函數),雖然它也是循環集合內部。 PS:如何使用方法的演示是這樣的:
List<Long> personIds = Collection2.transform(persons, new Function<Person,Long>(){
@Override
public Long apply(@Nullable Person person) {
return person.getPersonId();
}
});
有沒有辦法避免通過列表循環;您可以使用for
循環手動執行此操作,也可以讓一個庫爲您執行此操作(例如使用Google Guava函數或Java 8流)。如果你還沒有使用番石榴最簡單的方法很簡單:
List<Long> ids = new ArrayList(people.size());
for(Person p : people)
id.add(p.getPersonId());
理想有一種方法。如果你必須處理大型列表,這是非常有意義的。請看我的答案。 – Scheintod
列表ID =(列表)CollectionUtils.collect(鏈表類,新BeanToPropertyValueTransformer( 「PERSONID」));
這是可能的,而無需使用第三方模塊和不反覆(也無需編寫代碼太多):
只寫你的個人列表中的包裝,其訪問的ID:
static class PersonIdList extends AbstractList<Long> {
private final List<Person> wrapped;
public PersonIdList(List<Person> wrapped){
this.wrapped = wrapped;
}
@Override
public Long get(int index) {
return wrapped.get(index).personId;
}
@Override
public int size() {
return wrapped.size();
}
}
可以這樣使用:
List<Person> persons = Arrays.asList(
new Person(1L, "Foo"),
new Person(2L, "Bar"),
new Person(3L, "Joshua"));
PersonIdList personIds = new PersonIdList(persons);
for(Long id : personIds){
System.out.println(id);
}
該解決方案最好的原因與隨機訪問列表(例如ArrayList)而不是那麼好的 與順序列表(例如,鏈表)。
如果你需要它的鏈表和性能是一個問題(大鏈表,大型數據庫的結果),你可以擴展AbstractSequentialList及其迭代器或直接實現List和Iterator。
兩個會比這多了一個代碼,但我認爲這一個,你應該明白我的意思。
請提一下你試過的東西...和你的輸入和輸出...這似乎是一個非常模糊的問題 –
Mithun.ask與實際輸入和預期的輸出和快速回答的目標 – Kathir
爲什麼你想要避免循環?這是一個風格問題還是性能問題? – Scheintod