Как получить доступ к данным первого столбца и назначить другой vaiarble в массиве Java? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть файл .txt с некоторыми значениями (прилагается). Мне нужно выполнить среднюю и суммарную операцию для каждого столбца данных. Я не могу получить доступ к данным столбца после прочтения файла. Файл данных

public class EEG {

    public static void main(String[] args)  {
        String pathToCsv = "C:\\Users\\Raghu\\Desktop\\EEG files\\testEEGData.txt"; 
        List<String> l2 = new ArrayList<>();
         l = readFileInList(pathToCsv);     

        for(int i = 0; i < 1; i++) 
              System.out.println(l.get(i));
            // I want to performe operation here, like sum and average of first column


    public static List<String> readFileInList(String fileName) 
      {       
        List<String> lines = Collections.emptyList(); 
        try
        { 
          lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8); 
        } 

        catch (IOException e) 
        { 
          e.printStackTrace(); 
        } 
        return lines; 
      } 

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Разделите строку запятыми и обработайте первый элемент как число:

double value = Double.parseDouble(l.get(i).split(",")[0]);

Список отображения:

List<Double> numbers = l.stream()
      .map(line -> Double.parseDouble(line.split(",")[0]))
      .collect(Collectors.toList());

И сумма может быть вычислена:

numbers.stream().reduce(Double::sum)

Собираем это вместе:

List<String> l = readFileInList(pathToCsv); 

List<Double> numbers = l.stream()
      .map(line -> Double.parseDouble(line.split(",")[0]))
      .collect(Collectors.toList());

Double sum = numbers.stream().reduce(Double::sum).get();

Double avg = sum / numbers.size();
0 голосов
/ 24 октября 2019

Покажите мне текстовый файл. Тогда я могу вам помочь.

Пример:

public class App { 

    /*
        data.txt:
        5
        7
        8
        10
    */
    public static void main(String[] args) {
        App app = new App();
        app.calculation();
    }

    private void calculation() {
        String fileName = "./data.txt";

        try {
            List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());
            double sum = 0;
            double avg = 0.0;
            int count = 0;

            for (String line : lines) {
                if (line.matches("-?\\d+(\\.\\d+)?")) {
                    sum += Double.parseDouble(line);      
                    count++;
                }
            }

            avg = sum/count;

            System.out.println("sum = " + sum);  // 30.0
            System.out.println("avg = " + avg);  // 7.5
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
...