[英]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.