首页 > 解决方案 > 使用可配置的 BatchSize 访问 ArrayList 的 Java-8 方法

问题描述

这是我的用例:
我有一个包含 1000 条记录的字符串的 responseList。有一个可配置的 batchSize。我必须迭代 responseList,并且对于每个 split=batch 大小,我必须构造 DataResponseBean 和 publishToKafka。

比如我的responseList.size=1000,batchSize=100,我会构造DataResponseBean,向Kafka发布数据10次,而不是1000次。此外,如果在 publishToKafka 中抛出任何异常,我应该中断流并停止处理 responseList。

我需要帮助将其转换为 Java 8 样式(我迭代列表和增加页码的方式。

public class DataResponseBean {
    List<String> data;
    
    public List<String> getData() {
        return data;
    }

    public void setData(List<String> data) {
        this.data = data;
    }

    public MetaData getMetaData() {
        return metaData;
    }

    public void setMetaData(MetaData metaData) {
        this.metaData = metaData;
    }

    MetaData metaData;

}
public class MetaData {

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public int getPageNumber() {
        return pageNumber;
    }

    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    String orderId;
     int pageNumber;
}

这是我的 Java 7 代码风格:

import model.DataResponseBean;
import model.MetaData;

import java.util.*;
        
public class TestJavaClass {

    public static void main(String[] args) {
        List<String> dataList= Arrays.asList("jony","rakshi","raman","reka","nency","raman","rishi");
        String orderId="12345";
        int pageNumber=0;
        int batchSize=2;
        int currentBatchSize=0;
        List<String> batch=new ArrayList<String>();
        for(String data:dataList){
            try{
                batch.add(data);
                currentBatchSize++;
                if(currentBatchSize>=batchSize){
                    DataResponseBean dataResponseBean=new DataResponseBean();
                    MetaData metaData=new MetaData();
                    dataResponseBean.setData(batch);
                    metaData.setOrderId(orderId);
                    metaData.setPageNumber(pageNumber);
                    dataResponseBean.setMetaData(metaData);
                    publishToKafka(dataResponseBean);
                    batch.clear();
                    pageNumber++;
                    currentBatchSize=0;
    
                }
    
             }
    
             DataResponseBean dataResponseBean=new DataResponseBean();
             MetaData metaData=new MetaData();
             dataResponseBean.setData(batch);
             metaData.setOrderId(orderId);
             metaData.setPageNumber(pageNumber);
             dataResponseBean.setMetaData(metaData);
             publishToKafka(dataResponseBean);
             batch.clear();
        }catch(Exception e){
            batch.clear();
            break;
        }
            
    }

    private static void publishToKafka(DataResponseBean dataResponseBean) throws Exception {
        System.out.println("----------RESPONSE start================-");
        System.out.println("-----------"+dataResponseBean.getMetaData().getPageNumber());
        List<String> dataList=dataResponseBean.getData();
        dataList.forEach(data->{
            System.out.println("------data-----"+data);
        });
    }
}

请帮我将此代码转换为 Java 8 样式。我对 Java 8 很陌生。

[注意:对于我当前工作区中的某些问题,Lombok 无法正常工作。我将使用 Lombok 作为 DataResponseBean 和 MetaData]

标签: javaspring-bootjava-8java-stream

解决方案



推荐阅读