使用Java中的流过滤器可视化不正确的数据

问题描述 投票:0回答:1

我有一个证券交易所的 CSV 文件,我正在从中获取数据,在某些条件下读取并打印它。我必须显示它们的条件之一是显示每股的最低价值。我的代码只显示了三只股票中每只股票的第一条记录,并没有显示这些股票的最低值。我使用过滤器进行过滤时哪里出了问题?

我的代码

private static void smallestPriceByStock(List<String> stocks) throws ParseException {
    List<StockPrice> stockPrices = new ArrayList<>();
    HashSet<String> stock = new HashSet<>();
    SimpleDateFormat sdfOriginal = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat sdfNovaData = new SimpleDateFormat("dd/MM/yyyy");

    try {
        for (String s : stocks) {
            String[] array = a.split(",");
            String name = array[0];
            String date = array[1];
            Date dataOriginal = sdfOriginal.parse(date);
            float fechamento = Float.parseFloat(array[2]);
            long volume = Long.parseLong(array[3]);
            StockPrice stockPrice = new StockPrice(nome, dataOriginal, price, volume);
            stockPrices.add(stockPrice);
            Stock st = new Stock(name);
            st.addStockPrice(stockPrice);
            stock.add(st.getNome());

        }
        System.out.println("Menores fechamentos");
        List<Cotacao> cotas = new ArrayList<>();
        double smallestValue = 0;
        for(String a : acao) {
            for (Cotacao c : cotacoes) {
                if (c.getNome().contains(a)) {
                    smallestValue = cotacoes.stream()
                            .filter(x -> x.getNome() == a)
                            .mapToDouble(x -> x.getValue()).summaryStatistics().getMax();
                        System.out.println("Stock: " + c.getNome() + ", " + "Price: " + smallestValue + ", " + "Date: " + sdfNovaData.format(c.getData()));
                        break;
                    }
                }
            }

        for(Cotacao cotacao : cotas){
            System.out.println(cotacao.getNome());
        }
        System.out.println();
    } catch (UnsupportedOperationException | ParseException e) {
        throw new UnsupportedOperationException("calculaMenorFechamentoPorAcao não implementado", e);
    }
}

CSV 文件的一些示例:

Acao,Data,Fechamento,Volume
OGXP3,2013-01-01,4.38,0
OGXP3,2013-01-02,4.76,45904000
OGXP3,2013-01-03,4.90,38143400
PETR4,2013-01-02,19.69,30182600
PETR4,2013-01-03,20.40,30552600
PETR4,2013-01-04,20.43,36141000
PETR4,2013-01-07,20.08,28069600
VALE5,2013-01-01,40.87,0
VALE5,2013-01-02,42.60,18515700
VALE5,2013-01-03,42.09,15001800
VALE5,2013-01-04,41.36,26351900

java csv filter java-stream
1个回答
0
投票

你让事情变得更加复杂了。寻找最小值的常见伪代码是:

set lowestValue to null
for each value
   if lowestValue == null || value < lowestValue
       lowestValue = value

由于您有多个值要查找,每个值均由股票名称标识,因此您将 lower_value 定义为

Map<String, BigDecimal>
,其中键是股票标识符。处理完输入数据中的每一行后,地图将包含每只股票的最低值。不需要嵌套循环,因为所有操作都在单遍期间完成。填充地图后,您可以在地图数据的单独单个循环中进行打印。

© www.soinside.com 2019 - 2024. All rights reserved.