1. 程式人生 > >第10篇 java 8----用流收集資料 -----連線字串

第10篇 java 8----用流收集資料 -----連線字串

/**
 * 連線字串
 */
public class Demo02 {
    public static void main(String[] args) {
        List<Dish> menues = Arrays.asList(new Dish("rice", true, 10000, Dish.Type.FISH), new Dish("meate", false, 20000, Dish.Type.FISH), new Dish("dog", true, 30000, Dish.Type.FISH));
        test01(menues);
    }

    /**
     * joining工廠方法返回的收集器會把對流中每一個物件應用toString方法得到的所有字元
     * 串連線成一個字串。這意味著你把選單中所有菜餚的名稱連線起來,如下所示:
     * 請注意,joining在內部使用了StringBuilder來把生成的字串逐個追加起來。此外還
     * 要注意,如果Dish類有一個toString方法來返回菜餚的名稱,那你無需用提取每一道菜名稱的
     * 函式來對原流做對映就能夠得到相同的結果
     */
    public static void test01(List<Dish> menues) {
        String nameString = menues.stream().map(Dish::getName).collect(joining());
        System.out.println(nameString);
//        但該字串的可讀性並不好。幸好,joining工廠方法有一個過載版本可以接受元素之間的
//        分界符,這樣你就可以得到一個逗號分隔的菜餚名稱列表:
        String nameString2 = menues.stream().map(Dish::getName).collect(Collectors.joining(", "));
        System.out.println(nameString2);
    }
}