java – 从文件中流式传输n个整数列表以创建n个对象数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从文件中流式传输n个整数列表以创建n个对象数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2035字,纯文字阅读大概需要3分钟。
内容图文
假设每个T对象都可以实例化为
T tobj = new T(//int value);
因此,要在由空格分隔的文件中从整数创建T []数组,请执行以下操作:
BufferedReader br;
FileReader fr;
int[] arr;
try{
fr = new FileReader(fo); // assume "fo" file name
br = new BufferedReader(fr);
arr = Arrays.stream(br.readLine().split("\\s")).mapToInt(Integer::parseInt).toArray();
}catch(SomeException e){//something else}
T[] tobjarr = new T[arr.length];
for(int i=0; i<arr.length; ++i)){
tobjarr[i] = new T(arr[i]);
}
1.上述方法在时间和空间使用方面是否有效?
2.还有其他办法吗?如果是这样,它与上述方法相比如何?
解决方法:
一般来说,你的方法很好.但是,您可以使用单个流级联来实现.与您的原始方法相比,这可以节省您一次迭代.
另请注意,现在我们使用称为NIO的Javas新I / O API读取文件.一个很大的优点是它提供了Stream方法.例如,Files#lines方法在文件的所有行上返回一个流,非常适合您的方法.
总而言之,这是完整的代码:
String file = ...
Pattern separator = Pattern.compile("\\s");
try (Stream<String> lines = Files.lines(Paths.get(file))) {
T[] values = lines // Stream<String> lines
.flatMap(separator::splitAsStream) // Stream<String> words
.mapToInt(Integer::parseInt) // IntStream values
.mapToObj(T::new) // Stream<T> valuesAsT
.toArray(T[]::new);
} catch (IOException e) {
System.out.println("Something went wrong.");
}
请注意,此代码与您的代码略有不同,因为您的代码只处理一行并挖掘所有行.如果您不需要,可以更改:
List<T[]> valuesPerLine = Files.lines(Paths.get(file)) // Stream<String> lines
.map(separator::splitAsStream) // Stream<Stream<String>> wordsPerLine
.map(lineStream -> {
return lineStream // Stream<String> words
.mapToInt(Integer::parseInt) // IntStream values
.mapToObj(T::new) // Stream<T> valuesAsT
.toArray(T[]::new);
}) // Stream<T[]> valuesPerLine
.collect(Collectors.toList());
与原始方法的主要区别在于我们可以轻松地将IntStream转换为Stream< T>.通过使用mapToObj(T :: new)(或只是映射,如果它是常规流而不是IntStream)将元素传递给构造函数.之后,我们收集Stream< T>.使用toArray(T [] :: new)进入数组.
内容总结
以上是互联网集市为您收集整理的java – 从文件中流式传输n个整数列表以创建n个对象数组全部内容,希望文章能够帮你解决java – 从文件中流式传输n个整数列表以创建n个对象数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。