Given the code fragments:



class TechName {

    String techName;

    TechName(String techName) {
        this.techName = techName;
    }
}

and

List<TechName> tech = Arrays.asList(
        new TechName("Java-"),
        new TechName("Oracle DB-"),
        new TechName("J2EE-")
);
Stream<TechName> stre = tech.stream();
//line n1

Which should be inserted at line n1 to print Java-Oracle DB-J2EE-?

A.

stre.forEach(System.out::print);
B.
stre.map(a -> a.techName).forEach(System.out::print);
C.
stre.map(a -> a).forEachOrdered(System.out::print);
D.
stre.forEachOrdered(System.out::print);

題解

選項A,由於TechName類別沒有覆寫toString方法,因此無法直接輸出techName欄位的值,而是輸出最上層Object類別的toString方法所產生出來的字串。

選項B,利用Stream物件的map方法去替換Stream物件的元素為TechName物件的techName欄位值,之後再使用forEach方法將techName欄位值輸出,可得到題目要的輸出結果。

選項C,無法直接輸出techName欄位的值,理由同選項A。可以改成以下程式,即可得到正確結果:

stre.map(a -> a.techName).forEachOrdered(System.out::print);

選項D,無法直接輸出techName欄位的值,理由同選項A。