java - 有没有更简单的方法从对象集合中收集字符串?

标签 java android collections

我有一组 Ingredient 对象,我想获取它们的所有名称(通过 getName())并将它们连接成逗号分隔的字符串。目前我的代码如下所示:

public static String getIngredientList(Collection<Ingredient> ingredients) {
    final Iterator<Ingredient> iterator = ingredients.iterator();
    final String[] names = new String[ingredients.size()];

    for (int i = 0; iterator.hasNext(); i++) {
        names[i] = iterator.next().getName();
    }

    return TextUtils.join(", ", names);
}

我想知道是否有更简洁的方法将所有名称收集到 String[] 对象中。例如,如果这是 Ruby,就可以很容易地完成一个简短的单行代码来完全满足我的需要:

ingredients.map(&:name).join(', ')

最佳答案

使用 Eclipse Collections您可以使用 JDK 5 - 7 编写以下内容:

MutableList<Ingredient> ingredients =
        Lists.mutable.with(
                new Ingredient("Flour"),
                new Ingredient("Sugar"),
                new Ingredient("Eggs"),
                new Ingredient("Milk"));
MutableList<String> ingredientNames = ingredients.collect(new Function<Ingredient, String>()
{
    public String valueOf(Ingredient ingredient)
    {
        return ingredient.getName();
    }
});
String delimitedNames = ingredientNames.makeString(", ");
Assert.assertEquals("Flour, Sugar, Eggs, Milk", delimitedNames);

使用支持 lambda 和方法引用的 Java 8,您可以将其压缩为以下内容:

MutableList<Ingredient> ingredients =
        Lists.mutable.with(
                new Ingredient("Flour"),
                new Ingredient("Sugar"),
                new Ingredient("Eggs"),
                new Ingredient("Milk"));
String delimitedNames =
        ingredients.collect(Ingredient::getName).makeString(", ");
Assert.assertEquals("Flour, Sugar, Eggs, Milk", delimitedNames);

在此示例中,使用不带参数的重载形式的 makeString() 将产生相同的字符串,因为 makeString() 调用 makeString(“, “)。

String delimitedNames =
        ingredients.collect(Ingredient::getName).makeString();
Assert.assertEquals("Flour, Sugar, Eggs, Milk", delimitedNames);

注意:我是 Eclipse Collections 的提交者。

关于java - 有没有更简单的方法从对象集合中收集字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16523177/

相关文章:

java - 是否可以为多个列创建一个索引? hibernate

java - 使用 JOOQ,如何将 SQLException 映射到业务异常?

android - 如何从文本字段中获取标签?

java - 在 Java 中,从文件列表中删除重复文件

android - 测试涵盖的 Android 项目的好例子?

java - 数组删除首先从较低的索引开始?

java - Java 中按原语或装箱类进行 foreach 循环

java - log4j2.xml 已加载但未应用 [JVM 参数]

java - 如何调试 Spring NoSuchBeanDefinitionException

java - TestNG 参数无法识别字符串参数