[英]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.