Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更简单的方法从对象集合中收集字符串?_Java_Android_Collections - Fatal编程技术网

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

Java 有没有更简单的方法从对象集合中收集字符串?,java,android,collections,Java,Android,Collections,我有一个component对象的集合,我希望获得它们的所有名称(通过getName())并将它们连接到一个逗号分隔的字符串中。当前我的代码如下所示: public static String getIngredientList(Collection<Ingredient> ingredients) { final Iterator<Ingredient> iterator = ingredients.iterator(); final String[] n

我有一个
component
对象的集合,我希望获得它们的所有名称(通过
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);
}

为什么不首先使用
StringBuilder
? 守则的有关部分:

StringBuilder b = new StringBuilder();
for(Ingredient ingredient: ingredients) {
    b.append(ingredient.getName() + ", ");
}
return b.toString();
当然,您必须删除最后一个“,”added,这可以通过使用
substring
方法或不追加最后一个来完成

StringBuilder result = new StringBuilder();
for(String string : collectionOfStrings) {
    result.append(string);
    result.append(",");
}
return result.length() > 0 ? result.substring(0, result.length() - 1): "";
见复文:

使用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);

注意:我是Eclipse集合的提交者。

@323go可能配料将有多个字段重复。这将是一个棘手且不是很好的方法,但您可以实现配料的toString,它将只返回名称的值。然后您可以简单地使用
TextUtils.join(“,”,components.toArray())
Java8最终将允许一种ruby风格的方法来解决这个问题(通过一个简单的Lambda或直接使用一个方法句柄)。
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);
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);
String delimitedNames =
        ingredients.collect(Ingredient::getName).makeString();
Assert.assertEquals("Flour, Sugar, Eggs, Milk", delimitedNames);