簡體   English   中英

如何從 Stream 更改<arrays[string]>至 Stream<strings> java 8</strings></arrays[string]>

[英]How to change from Stream<arrays[String]> to Stream<Strings> java 8

我無法將數組(字符串)的 Stream 轉換為字符串的 Stream。

public static List<String> getFirstNames(List<String> names){
        return names.stream()
                .map(x->x.split("\\s[A-Za-z]+"))
                .map(elem-> new String())
                .collect(Collectors.toList());
}

我有一個輸入字符串列表,包括名字和姓氏。 在 output 上必須有名字列表。

使用.map(x->x.split("\\s[A-Za-z]+")[0])並省略第二個不必要的map 你想要數組的第一個元素,它是一個字符串。 沒有理由將整個數組傳遞給第二個map()

但如果你真的想要,那么第二個 map 必須是.map(arr -> arr[0]) 您不需要新的String ,它已經存在。

此外,因為這是基本語法(不是流,而是訪問 arrays 並使用字符串),請在此處刷一下,否則您將繼續被簡單的錯誤絆倒。

在空格上拆分( split(" ") )在您看來更具可讀性,除非您有理由使用更麻煩的版本?

如果您的列表包含像"FirstName LastName"這樣的元素,您可以使用substring()方法提取名字s.substring(0, s.indexOf(" ")

嘗試這個:

public static List<String> getFirstNames(List<String> names){
    return names.stream().map(s -> s.substring(0, s.indexOf(" "))).collect(Collectors.toList());
}

如果您的列表包含單個單詞元素:

public static List<String> getFirstNames(List<String> names){
    return names.stream().map(s -> s.indexOf(" ")>0 ? s.substring(0, s.indexOf(" ")) : s).collect(Collectors.toList());
}
public static List<String> getFirstNames(List<String> names){
    return names.stream()
            .map(x->Arrays.asList(x.split("\\s[A-Za-z]+")))
            .flatMap(Collection::stream)
            .collect(Collectors.toList());
}

flatMap 完成這項工作

最佳解決方案:

public static List<String> getFirstNames(List<String> names){
    return names.stream()
            .map(x->x.split("\\s+")[0])
            .collect(Collectors.toList());
}

這是使用帶有平面圖的 Arrays::stream 的示例

List<String> firstNames =
            Arrays.asList("Aman Singh","Raj Malhotra").stream()
                    .map(word -> word.split("\\s[A-Za-z]+"))
                    .flatMap(Arrays::stream)
                    .collect(toList());

    System.out.println("First names are" + firstNames);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM