Java 中 list集合中有幾十萬條數據,每次100條爲一組取出(一定的量取出)

在開發的過程中要處理Excel文件,將其文檔的內容按照一定的形式封住加密之後寫入到Kafka中,但是Kafka那邊一次性不能消費大量的數據,所以要將數據分批次寫入。這裏是用一個List來作爲中間載體,每次取出一定量的數據寫入Kafka中,並且寫入之後進行短時間的休眠,防止數據堆積過多。

優化代碼:

		// 裝填100條數據
        for (int i = 0; i < list.size(); i += 100) {
            if (i + 100 > list.size()) {
                // 注意下標問題
                toIndex = list.size() - i;
            }
            List newList = list.subList(i, i + toIndex);
            sendList = newList;
            // 將數據寫入到Kafka中
            writeToKafka(kafkaProducer, topic, sendList);
        }

這裏要注意的一個問題是,下標處理的問題。之前我在測試的過程中報了一個數組下標越界的錯誤,然後調試的過程中發現toIndex的值最後取的有問題,原來是在判斷最後餘數條的時候出現了邏輯問題,直接將list.size()-1當成了toIndex的值 之後將其進行了修改

未優化前代碼:

// 裝填200條數據
        for (int i = 0; i < list.size(); i += 200) {
            if (i + 200 > list.size()) {
                // 注意下標問題
                toIndex = list.size() - 1;
               List newList = list.subList(i, i + toIndex);
               sendList = newList;
               break;
            }
            List newList = list.subList(i, i + toIndex);
            sendList = newList;
            writeToKafka(kafkaProducer, topic, sendList);
        }

發現這個版本有點冗餘,感覺有點重複了,於是進行了優化處理。在碰到問題的時候要多進行思考,這樣才能夠迎難而上… Fighting!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章