如何在列表中搜索每个区分的只有4个元素?
How to search in a list only 4 elements of each distinction?
如何在一个列表中只搜索每4个元素的区别?
例子
我有一个主列表,我在其中一次接收所有数据,包括重复数据。
用户列表= [1234,1234,1234,1234,1234,1234,1234,5432,5432,5432,5432,5432,5432...]
我需要根据收到的数据将此数据分成 4 组,如示例中所示。
另一个列表中的预期结果 = [1234,1234,1234,1234,5432,5432,5432,5432].. .
如何做到这一点?
我更改代码以生成 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();
首先,您可以从 ArrayList.You 中获取所有不同的数字,如果您使用 HashSet.That 为整数列表工作,则可以做到这一点。
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;
}
这是我的解决方案。
后半部分同上答案
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);
}
如何在一个列表中只搜索每4个元素的区别?
例子
我有一个主列表,我在其中一次接收所有数据,包括重复数据。
用户列表= [1234,1234,1234,1234,1234,1234,1234,5432,5432,5432,5432,5432,5432...]
我需要根据收到的数据将此数据分成 4 组,如示例中所示。
另一个列表中的预期结果 = [1234,1234,1234,1234,5432,5432,5432,5432].. .
如何做到这一点?
我更改代码以生成 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();
首先,您可以从 ArrayList.You 中获取所有不同的数字,如果您使用 HashSet.That 为整数列表工作,则可以做到这一点。
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;
}
这是我的解决方案。
后半部分同上答案
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);
}