RS.CLIPPY.UNNECESSARY_JOIN
Using `.collect::<Vec<String>>().join(\"\")` on an iterator
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: unnecessary_join. Copyright ©2025 The Rust Team. All rights reserved.
What it does
Checks for usage of .collect::<Vec<String>>().join("") on iterators.
Why is this bad?
.collect::<String>() is more concise and might be more performant
Example
let vector = vec!["hello", "world"];
let output = vector.iter().map(|item| item.to_uppercase()).collect::<Vec<String>>().join("");
println!("{}", output);
The correct use would be:
let vector = vec!["hello", "world"];
let output = vector.iter().map(|item| item.to_uppercase()).collect::<String>();
println!("{}", output);
Known problems
While .collect::<String>() is sometimes more performant, there are cases where
using .collect::<String>() over .collect::<Vec<String>>().join("")
will prevent loop unrolling and will result in a negative performance impact.
Additionally, differences have been observed between aarch64 and x86_64 assembly output,
with aarch64 tending to producing faster assembly in more cases when using .collect::<String>()