我有以下声明创建String数组的数组:
Activity
是否可以按以下方式获取信息流?我在Eclipse中尝试过,但出现错误。
String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};
试图通过网络进行搜索,但是大部分结果显示都是从一维字符串数组中获取流,如下所示:
Stream<String,String> streamObj = Arrays.stream(strArr);
答案 0 :(得分:2)
对于Stream<String, String>
类,没有可行的表示形式,例如java.util.stream.Stream
,因为其通用实现依赖于单个类型,例如声明为:
public interface Stream<T> ...
您仍可能collect
Map<String, String>
中的键值对Map<String, String> map = Arrays.stream(strArr)
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
映射为:
Map
要仅将条目进一步包装而不将其收集到Stream
中,可以创建SimpleEntry
的{{1}},如下所示:
Stream<AbstractMap.SimpleEntry<String, String>> entryStream = Arrays.stream(strArr)
.map(sub -> new AbstractMap.SimpleEntry<>(sub[0], sub[1]));
答案 1 :(得分:1)
您可以定义一个名为StringPair的POJO并映射流。
public class PairStream {
public static void main(String[] args) {
String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};
Arrays.stream( strArr ).map( arr -> new StringPair(arr) ).forEach( pair -> System.out.println(pair) );
}
private static class StringPair {
private final String first;
private final String second;
public StringPair(String[] array) {
this.first = array[0];
this.second = array[1];
}
@Override
public String toString() {
return "StringPair [first=" + first + ", second=" + second + "]";
}
}
}
以及您可以使用的Apache Commons lang Pair
public class PairStream {
public static void main(String[] args) {
String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};
Arrays.stream( strArr ).map( arr -> Pair.of(arr[0],arr[1]) ).forEach( pair -> System.out.println(pair) );
}
}