我有以下设置(即Entity
是JPA2
权利,entities
是一个集合
class Entity {
Set<SubEntity> entities = new HashSet<>();
public Set<SubEntity> getEntities() {
return entities;
}
}
class SubEntity {
Double value;
// setters and getters ommitted
}
class SomeLibrary {
public static List<Double> transform(List<Double> values) {
// transform values and return a new list with transfored values
}
}
我需要通过使用带有value
的外部库来转换SubEntity
中的List<Doubles>
字段,并返回包含已转换值的新列表。之后我需要使用transofmred值更新SubEntity
。
由于Set
没有保留迭代顺序,我首先将其转换为ImmutableSet
并使用Collections2.transform
创建ImmutableList
个值。
ImmutableSet<SubEntity> entities = ImmutableSet.copyOf(entity.getEntities());
ImmutableList<Double> values = ImmutableList.copyOf(Collections2.transform(entities, (e) -> e.getValue()))
此时我假设两个集合中的项目(entities
和values
都匹配,就像我同时压缩两个列表一样)
List<Double> transformedValues = SomeLibrary.transform(values);
Iterator<SubEntity> entityIterator = entities.iterator();
Iterator<Double> valueIterator = transformedValues.iterator();
while(entityIterator.hasNext() && valueIterator.hasNext()) {
SubEntity entity = entityIterator.next();
Double value = valueIterator.next();
entity.setValue(value);
}
所以有两个问题:
ImmutableSet
和SubEntity
转换后的值时,我认为值匹配。当我使用不可变集合和List
函数?答案 0 :(得分:3)
new ArrayList<>(entity.getEntities())
即可获得可靠,一致的迭代顺序。