首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

关于数组转入list集合删除连续重复的有关问题

2013-11-25 
关于数组转入list集合删除连续重复的问题本帖最后由 fulijung 于 2013-11-24 15:37:25 编辑我这里的意思是

关于数组转入list集合删除连续重复的问题
本帖最后由 fulijung 于 2013-11-24 15:37:25 编辑      我这里的意思是只有两个元素相邻并相同才算重复,如果两个元素相同但没有挨在一起就不算重复,
比如下面例子,红颜色的两个与绿色的两个属性相同但不相邻不算重复。蓝色的三个与黑色的三个
属性相同但相邻挨在一起所以算重复。删除处理后只保留第一次出现的元素如下所示:
    文件是以BufferedReader的 reader.readLine()方法先读出来放入数组,然后再根据设备屏幕要显示显示多少行,把数组放入list,在屏幕上画条形图的,欢迎大家出谋划策,不胜感激
     另外提醒大家一下回帖时输入“股 票”字样的时候中间要留空格,不然回帖会提示字符非法。郁闷吖!
     我又发了一个帖子在这里,麻烦大家过去看看好吗?链接是:http://bbs.csdn.net/posts/396163680

日期              开盘        收盘
09/23/2013,  2192.23 ,2198.11
09/24/2013,  2219.47 ,2219.54
09/25/2013,  2192.23 ,2198.11
09/26/2013,  2219.47 ,2219.54
09/27/2013,  2150.96 ,2165.78
09/28/2013,  2150.96 ,2165.78
09/29/2013,  2150.96 ,2165.78
09/30/2013,  2167.73 ,2176.30
10/01/2013,  2167.73 ,2176.30
10/02/2013,  2167.73 ,2176.30
上面的数据处理后要求变成下面这样:
日期              开盘        收盘
09/23/2013,  2192.23 ,2198.11
09/24/2013,  2219.47 ,2219.54
09/25/2013,  2192.23 ,2198.11
09/26/2013,  2219.47 ,2219.54
09/27/2013,  2150.96 ,2165.78  这里要求只剩下第一次出现的日期九月27日,而28日与29日删除。
09/30/2013,  2167.73 ,2176.30  这里要求只剩下第一次出现的日期九月30日,而十月1日与十月2日删除。
大家明白了吗,谢谢回复


小弟最近在开发股 票软件时,从网上下载股 票原始文件时有个删除重复的方法一直想不出来。
    原始文件是c s v或t x t的文件,格式如下:分行读取,每行又以逗号分割成交易日期,开盘价,
收盘价三个属性。本来周六周日与节假日是不交易的,原始数据却是把周六周日与节假日之前的
一天的开盘收盘价, 顺延下去填充到非交易日里,这样就造成了重复,意思就是所有非交易日里
的开盘与收盘价跟前一天是相同的。这就造成了一个问题,如何删除这些重复的非交易日与数据,
并且还要保持日期先后顺序不变? 我用数组去重复的一般方法不行,这样会把不相邻的重复也删除了。
我这里如果日期不相邻就不算重复。就像下面 09/23/2013日与09/25/2013日都是2199.36,2223.07但
两个日期不相邻,不算重复。
    处理后如下所示:看左边与  右边的对照。我的意思是可以不用直接处理原始文件,但读取的时候
要按要按处理后的格式读出来,后面我把我的源代码贴出来(还有一个数据的源文件附件)
等待大家帮忙解决。
日期           开盘           收盘(逗号分割)                       日期       开盘    收盘(逗号分割)         
09/23/2013,2199.36,2223.07                          09/23/2013,2199.36,2223.07 
09/24/2013,2219.47,2219.54                          09/24/2013,2219.47,2219.54
09/25/2013,2199.36,2223.07                          09/25/2013,2199.36,2223.07
09/26/2013,2192.23,2192.23                          09/26/2013,2192.23,2192.23
09/27/2013,2150.96,2165.78                          09/27/2013,2150.96,2165.78
09/28/2013,2150.96,2165.78                          这两天是周六日要删除,这两天
09/29/2013,2150.96,2165.78                          的价格与前面相邻的周五相同
09/30/2013,2167.73,2176.30                          09/30/2013,2167.73,2176.30
10/01/2013,2167.73,2176.30                          这七天是长假日也要删除,这
10/02/2013,2167.73,2176.30                          七天与前面相邻的09/30/2013
10/03/2013,2167.73,2176.30                          日价格相同
10/04/2013,2167.73,2176.30                                              
10/05/2013,2167.73,2176.30                          


10/06/2013,2167.73,2176.30                          
10/07/2013,2167.73,2176.30                                          
10/08/2013,2171.90,2200.02                          10/08/2013,2171.90,2200.02
10/09/2013,2191.39,2212.35                          10/09/2013,2191.39,2212.35
10/10/2013,2214.41,2214.59                          10/10/2013,2214.41,2214.59
10/11/2013,2201.41,2228.87                          10/11/2013,2201.41,2228.87




[解决办法]
这个我觉得甚至都用不着list
你读第一行的时候找个对象缓存一下,再读第二行的时候对比一下是否一样,然后把第二行赋值那个对象,继续读第三行。
[解决办法]
73至78行改成:


        float PriceOpenTemp = 0;
        float PriceCloseTemp = 0;
        for (int i = 0; i <= 18; i++) {
            if (PriceOpenTemp == BarsData.get(i).PriceOpen && PriceCloseTemp == BarsData.get(i).PriceClose) {
                continue;
            }
            System.out.println("行号是:" + BarsData.get(i).BarNum + "  "
                    + "日期是:" + BarsData.get(i).BarDate + "  "
                    + "开盘是:" + BarsData.get(i).PriceOpen + "  "
                    + "收盘是:" + BarsData.get(i).PriceClose);
            PriceOpenTemp = BarsData.get(i).PriceOpen;
            PriceCloseTemp = BarsData.get(i).PriceClose;
        }

[解决办法]
那就改成:

        float PriceOpenTemp = 0;
        float PriceCloseTemp = 0;
        int lineNumber = 0;
        for (int i = 0; i <= 18; i++) {
            if (PriceOpenTemp == BarsData.get(i).PriceOpen && PriceCloseTemp == BarsData.get(i).PriceClose) {
                continue;
            }
            System.out.println("行号是:" + lineNumber + "  "
                    + "日期是:" + BarsData.get(i).BarDate + "  "
                    + "开盘是:" + BarsData.get(i).PriceOpen + "  "
                    + "收盘是:" + BarsData.get(i).PriceClose);
            PriceOpenTemp = BarsData.get(i).PriceOpen;
            PriceCloseTemp = BarsData.get(i).PriceClose;
            lineNumber++;
        }

热点排行