我有以下设置(例如,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
}
}我需要使用外部库转换SubEntity中的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和List时,我假设这些值是匹配的。当我使用不可变集合和transform函数时,这是否得到保证?发布于 2016-02-18 10:45:43
new ArrayList<>(entity.getEntities())就足以获得可靠、一致的迭代顺序。https://stackoverflow.com/questions/35479056
复制相似问题