字符串与字符串构建器

我有这样的情况:

public String createId(List<String> list)
{
String id="";
if(list.contains("name"))
id+="TEST VALUE NAME";
if(list.contains("age"))
id+="Test Value AGE";
.
.
. likewise many if condition
return id;
}

根据我的理解,我们应该在循环条件中使用 StringBuilder 并在简单连接中使用 String。所以这里想问我应该使用String 还是StringBuilder?请推荐

xunying_1 回答:字符串与字符串构建器

StringBuilder 最适合这种情况,因为它是可变的。 String 是不可变的,因此当您修改字符串时,它会创建一个新对象。

,

似乎对于给定的任务,最好通过定义键的 list 来匹配输入列表并使用 Stream API 来摆脱多个重复的 if 语句生成字符串id,例如Collectors.joining with delimiterwithout the delimiter

假设有一条规则来创建 id 的一部分:append "Test Value " + key.toUpperCase(),实现可能如下所示:

final List<String> keys = Arrays.asList(
    "name","age" /* and other needed keys*/
);

public String createId(List<String> list) {
    return keys
            .stream()
            .filter(list::contains)
            .map(String::toUpperCase)
            .map(str -> "Test Value " + str)
            .collect(Collectors.joining("_")); // or Collectors.joining()
}

System.out.println(createId(Arrays.asList("age","name","surname")));
// output: Test Value NAME_Test Value AGE

如果应为 nameage 等提供自定义部件,则应准备和使用 Map 匹配项,也可以将输入 {{ 1}} 到 list 以方便查找:

Set<String
,

总的来说,您对何时使用 String 连接与 StringBuilder 的理解是正确的。 Java Language Specification

为了提高重复字符串连接的性能,Java 编译器可以使用 StringBuffer 类或类似的技术来 减少创建的中间 String 对象的数量 表达式的求值。

在大多数情况下,您应该使用能够提高可读性和可维护性的任何一种方法。

本文链接:https://www.f2er.com/11832.html

大家都在问