简体   繁体   English

如何在列表中仅搜索每个区别的 4 个元素?

[英]How to search in a list only 4 elements of each distinction?

How to search in a list only 4 elements of each distinction?如何在列表中仅搜索每个区别的 4 个元素?

Example例子

I have a main list, where I receive all the data at once, including repeated data.我有一个主列表,我可以在其中一次接收所有数据,包括重复数据。

User list = [ 1234,1234,1234,1234,1234,1234,1234 , 5432,5432,5432,5432,5432,5432 ...]用户列表 = [ 1234,1234,1234,1234,1234,1234,1234 , 5432,5432,5432,5432,5432,5432 ...]

I need to break this data into groups of 4, according to the data received, as in the example.我需要根据收到的数据将这些数据分成 4 组,如示例所示。

Expected result in another list = [ 1234,1234,1234,1234 , 5432,5432,5432,5432 ]...另一个列表中的预期结果 = [ 1234,1234,1234,1234 , 5432,5432,5432,5432 ]...

How to make that difference?如何做出这样的改变?

I change my code to generate a csv file instead of moving to another list我更改代码以生成 csv 文件,而不是移动到另一个列表

    try {

        Date dataInicio = new SimpleDateFormat("dd-MM-yyyy").parse(inicio);
        Date dataFim = new SimpleDateFormat("dd-MM-yyyy").parse(fim);
        Date dataAtual = new Date();
        nomeCpfLogin = nomeCpfLogin.toUpperCase();
        
        List<RevogacaoConsolidadoSMS> revogacaoData = revogacao.consultaConsolidadoNetSMS(dataInicio, dataFim,nomeCpfLogin);
        
        List<RevogacaoConsolidadoSMS> statusCorrigido = validaStatus(revogacaoData);
        
        statusCorrigido = statusCorrigido.stream().distinct().collect(Collectors.toList());
                
        File arquivo = new File(environment.getRequiredProperty("path.csv")+"ConsolidSMS.csv");
        

        // Cria arquivo caso não exista.
        if (!arquivo.exists()) {
            arquivo.createNewFile();
        }

        /*
         * Escreve o arquivo e guarda dentro do caminho desejado objeto arquivo 
         * Nome dos processos
         * DUM;ISP;ABC; BSU; SPO ;CTV ;BHPR ;SUL ;DB09 ;DB09S ;
         * 
         */
        FileWriter fw = new FileWriter(arquivo);
        BufferedWriter bw = new BufferedWriter(fw);
        String result = "";
        bw.write("Login" + ";" + "Nome" + ";" + "CPF" + ";" + "Desligamento" + ";" + "Sistema" +
                 ";" + "Data/Hora Gravação" + ";" + "Status por base" +";"
                + "Protocolo" + ";" + "Processado" + ";");
        for (RevogacaoConsolidadoSMS revog : statusCorrigido) {

            for (int i = 0; i <= 4; i++) {
                if (i == 1) {
                    revog.setNome_sistema("SMS");
                } else if (i == 2) {
                    revog.setNome_sistema("ATSAL");

                } else if (i == 3) {
                    statusCorrigido.get(i).setNome_sistema("NATSAL");
                    revog.setNome_sistema("NATSAL");
                } else if (i == 4) {
                    statusCorrigido.get(i).setNome_sistema("PERF");
                    revog.setNome_sistema("PERF");
                }

                bw.newLine();
                bw.write(revog.getLogin() + ";" + revog.getNome() + ";" + revog.getCpf() + ";"
                        + revog.getData_desligamento() + ";" + revog.getNome_sistema() + ";"
                        + revog.getData_gravacao() + ";" + revog.getStatus() + ";" + revog.getProtocolo() + ";"
                        + revog.getData_processado());
            }
        }
        bw.close();
        fw.close();

First you can take all the different numbers from the ArrayList.You can do that if you use HashSet.That worked for a List of integers.首先,您可以从 ArrayList 中获取所有不同的数字。如果您使用 HashSet,您可以这样做。这适用于整数列表。

public static ArrayList<Integer> groupSeperator(ArrayList<Integer> nList) {
    ArrayList<Integer> mainList = new ArrayList<>();
    HashSet<Integer> dNumbers = new HashSet(nList);

    for (Integer n : dNumbers) {

        for (int i = 0; i < 4; i++) {
            mainList.add(n);
        }

    }

 return mainList;
}
    

This is my solution.这是我的解决方案。

The latter half is the same as the answer above.后半部分与上面的答案相同。

    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>(
                Arrays.asList(1234, 1234, 1234, 1234, 1234, 1234, 1234, 5432, 5432, 5432, 5432, 5432, 5432));

        list = list.stream().distinct().collect(Collectors.toList());
        
        List<Integer> result = new ArrayList<>();
        
        for(Integer l : list) {
            for(int i = 0; i < 4; i++)
                result.add(l);
        }
        
        System.out.println(result);
        
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM