Skip to content

Builders

Vector.Builder

A mutable, single-use accumulator for a Vector. Use it when you build a Vector in a loop: each append on a Vector copies part of it, while the builder writes each element once.

Vector.Builder<String> builder = Vector.newBuilder();
for (String word : "the quick brown fox".split(" ")) {
    builder.add(word.toUpperCase());
}
Vector<String> words = builder.result();
// Vector(THE, QUICK, BROWN, FOX)
Member Does
Vector.newBuilder() an empty builder
add(a) appends one element
addAll(iterable) appends every element
size() the number of elements added so far
result() the Vector; afterwards every method throws IllegalStateException

A builder is not thread-safe and not reusable: after result(), create a new one. Adding null throws a NullPointerException.

newBuilder(sizeHint) takes the expected size. It only helps for small vectors, of 32 elements or fewer.

Vector.Builder<Integer> both = Vector.newBuilder(8);
both.addAll(Vector.of(1, 2, 3)).add(4);
int added = both.size();
Vector<Integer> result = both.result();
// added is 4, result is Vector(1, 2, 3, 4)

Vector's own bulk operations, such as ofAll, flatMap or collect, already use a builder.

Collectors

Every collection has a collector() for java.util.stream.Stream.collect. Vector.collector() uses a Vector.Builder.

Vector<Integer> lengths = java.util.stream.Stream.of("a", "bb", "ccc").map(String::length).collect(Vector.collector());
TreeSet<String> sorted = java.util.stream.Stream.of("b", "a", "b").collect(TreeSet.collector());
// Vector(1, 2, 3), TreeSet(a, b)

The other collections have no builder. Their ofAll factories take any Iterable or java.util.stream.Stream.