有没有办法将 return 值作为数组存储在 Java 中?
Is there a way to store return values as an array in Java?
我有一个用 Eclipse 编写的 Java 程序,目的是获取存储在 Excel 中的数据值,并将这些值放入相关图中,以便使用 Nebula 插件进行假设检验。我我正在使用缓冲 reader 导入我的数据,并且我已经能够使用封装和构造函数将我想要 return 的数据获取到控制台。我的问题:是否可以/实用地将此输出存储到数组中以便我可以绘制它?我的想法是初始化数组,然后通过某种方法以某种方式存储输出,但我仍然不知道如何去做....
编辑:我应该澄清 - 我问的是将我的对象转移到并行数组中。这是好习惯吗?如果是这样,如何才能最有效地做到这一点?
一些代码(很长,但我不想遗漏任何关键内容):
public class CovidPlots {
public static void main(String[] args) {
//Data source
List<Book> stocks = readBooksFromCSV("COVID_DJI.csv");
for (Book b : stocks) {
System.out.println(b);
}
private static List<Book> readBooksFromCSV(String fileName) {
List<Book> stocks = new ArrayList<>();
Path pathToFile = Paths.get("C:\Users\zrr81\Downloads\COVID-19_Analysis\COVID_DJI.csv");
//Try/catch IO exception for input file stream
try (BufferedReader br = Files.newBufferedReader(pathToFile, StandardCharsets.US_ASCII)) {
//Initialize counter to skip header
int count = 0;
String line = br.readLine();
while(line != null) {
//Tell the reader to split the text when it hits the delimiter
String[] attributes = line.split(",");
Book book = createBook(attributes);
stocks.add(book);
count ++;
line = br.readLine();
}
}
catch (IOException e) {
e.printStackTrace();
}
return stocks;
}
//Create output arrays
String[] days;
double [] openers;
double[] closers;
//Import data into array "Book"
private static Book createBook(String[] metadata) {
String day = metadata[0];
double opener = Double.parseDouble(metadata[1]);
double closer = Double.parseDouble(metadata[4]);
return new Book(day, opener, closer);
}
}
//Book class file (separate file in my package)
class Book {
//Define spreadsheet "Book"
private String date;
private double opener;
private double closer;
// All-args constructor, getters, setters and toString()
// left out for brevity
}
我做了更多的研究,我想我找到了一种轻松地将它们构建到数组中的方法。在这里发帖以防其他人有同样的问题:
//Create arrays that can hold output
double[] opening;
double[] closing;
int len = stocks.size();
opening = new double[len];
closing = new double[len];
int j = 0;
for (Book x : stocks) {
double o_value = x.getOpen();
double c_value = x.getClose();
opening[j] = o_value;
closing[j] = c_value;
j++;
}
这会提取构造函数值,即使它们是私有的也是如此,因为它使用一个 for each 循环和一个与 ArrayList 类型相同的对象。这将创建并行数组,每个数组都包含我需要绘制的数据。仍然不知道这是否是最佳实践,因为我已经阅读了有关并行阵列的不同内容,但它解决了我的问题。
我有一个用 Eclipse 编写的 Java 程序,目的是获取存储在 Excel 中的数据值,并将这些值放入相关图中,以便使用 Nebula 插件进行假设检验。我我正在使用缓冲 reader 导入我的数据,并且我已经能够使用封装和构造函数将我想要 return 的数据获取到控制台。我的问题:是否可以/实用地将此输出存储到数组中以便我可以绘制它?我的想法是初始化数组,然后通过某种方法以某种方式存储输出,但我仍然不知道如何去做....
编辑:我应该澄清 - 我问的是将我的对象转移到并行数组中。这是好习惯吗?如果是这样,如何才能最有效地做到这一点?
一些代码(很长,但我不想遗漏任何关键内容):
public class CovidPlots {
public static void main(String[] args) {
//Data source
List<Book> stocks = readBooksFromCSV("COVID_DJI.csv");
for (Book b : stocks) {
System.out.println(b);
}
private static List<Book> readBooksFromCSV(String fileName) {
List<Book> stocks = new ArrayList<>();
Path pathToFile = Paths.get("C:\Users\zrr81\Downloads\COVID-19_Analysis\COVID_DJI.csv");
//Try/catch IO exception for input file stream
try (BufferedReader br = Files.newBufferedReader(pathToFile, StandardCharsets.US_ASCII)) {
//Initialize counter to skip header
int count = 0;
String line = br.readLine();
while(line != null) {
//Tell the reader to split the text when it hits the delimiter
String[] attributes = line.split(",");
Book book = createBook(attributes);
stocks.add(book);
count ++;
line = br.readLine();
}
}
catch (IOException e) {
e.printStackTrace();
}
return stocks;
}
//Create output arrays
String[] days;
double [] openers;
double[] closers;
//Import data into array "Book"
private static Book createBook(String[] metadata) {
String day = metadata[0];
double opener = Double.parseDouble(metadata[1]);
double closer = Double.parseDouble(metadata[4]);
return new Book(day, opener, closer);
}
}
//Book class file (separate file in my package)
class Book {
//Define spreadsheet "Book"
private String date;
private double opener;
private double closer;
// All-args constructor, getters, setters and toString()
// left out for brevity
}
我做了更多的研究,我想我找到了一种轻松地将它们构建到数组中的方法。在这里发帖以防其他人有同样的问题:
//Create arrays that can hold output
double[] opening;
double[] closing;
int len = stocks.size();
opening = new double[len];
closing = new double[len];
int j = 0;
for (Book x : stocks) {
double o_value = x.getOpen();
double c_value = x.getClose();
opening[j] = o_value;
closing[j] = c_value;
j++;
}
这会提取构造函数值,即使它们是私有的也是如此,因为它使用一个 for each 循环和一个与 ArrayList 类型相同的对象。这将创建并行数组,每个数组都包含我需要绘制的数据。仍然不知道这是否是最佳实践,因为我已经阅读了有关并行阵列的不同内容,但它解决了我的问题。