public RevFeature build(ObjectId id) { return new RevFeatureImpl(id, new ArrayList<>(values)); }
@Override public Optional<Object> get(final int index) { return Optional.fromNullable(safeCopy(values.get(index))); }
public @Override ImmutableList<Optional<Object>> getValues() { final int size = size(); Builder<Optional<Object>> builder = ImmutableList.builder(); for (int i = 0; i < size; i++) { builder.add(Optional.fromNullable(ValueArray.safeCopy(values[i]))); } return builder.build(); }
@Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Feature["); builder.append(getId().toString()); builder.append("; "); boolean first = true; for (Object value : values) { if (first) { first = false; } else { builder.append(", "); } String valueString = String.valueOf(value); builder.append(valueString.substring(0, Math.min(10, valueString.length()))); } builder.append(']'); return builder.toString(); }
/** * @implNote: In order to preserve the {@link ValueArray}'s immutability, a safe copy of each * element in {@code values} will be assigned if it's a mutable type. */ public @Override @NonNull RevFeature createFeature(@NonNull ObjectId id, @NonNull Object... values) { Object[] safe = new Object[values.length]; for (int i = 0; i < values.length; i++) { safe[i] = ValueArray.safeCopy(values[i]); } return new RevFeatureImpl(id, safe); }
@Override public void forEach(final Consumer<Object> consumer) { values.forEach((v) -> consumer.accept(safeCopy(v))); }
/** * @implNote: In order to preserve the {@link ValueArray}'s immutability, a safe copy of each * element in {@code values} will be assigned if it's a mutable type. */ public @Override @NonNull RevFeature createFeature(@NonNull ObjectId id, @NonNull List<Object> values) { Object[] safe = new Object[values.size()]; for (int i = 0; i < values.size(); i++) { safe[i] = ValueArray.safeCopy(values.get(i)); } return new RevFeatureImpl(id, safe); }
@Override public ImmutableList<Optional<Object>> getValues() { return ImmutableList .copyOf(Lists.transform(values, (v) -> Optional.fromNullable(safeCopy(v)))); }
public RevFeature build() { ObjectId id = HashObject.hashFeature(values); return new RevFeatureImpl(id, new ArrayList<>(values)); }