java - 在arrayList(整数和字符串)中查找并返回给定用户输入的所有重复项
问题描述
有一些初学者的麻烦。我有一个包含多个元素的 arrayList,但在尝试返回所有重复项的列表时遇到问题。我存储在 arrayList 中的信息:
LogEntry(LocalDateTime date, String status, int id, String cod)
2018-10-23T12:05:22 DATA 325 6d33
2017-01-13T10:09:30 INFO 325 5f22
2018-05-10T18:55:30 INFO 111 6a23
2018-05-03T17:44:50 ERROR 325 5f22
2017-06-15T16:25:31 DATA 111 8472
ArrayList<LogEntry> logList = new ArrayList();
我尝试使用它来搜索字符串条目:
String logLevel;
System.out.println("Search Log Level:\n(Info, Debug, Error)");
logLevel = read.nextLine().toUpperCase();
List<Integer> allIndexes
= IntStream.range(0, logList.size()).boxed()
.filter(i -> logList.get(i).status.equals(logLevel))
.collect(Collectors.toList());
// check duplicates
for (int i = 0; i < allIndexes.size(); i++) {
System.out.println(logList.get(i).checkData());
}
但是我得到了一些好坏参半的结果(从另一台 PC 运行时返回错误)。
试图适应搜索整数是行不通的:
private static void id_n() {
int logid;
System.out.println("ID:\n");
logid = read.nextInt();
List<Integer> allIndexes
= IntStream.range(0, logList.size()).boxed()
.filter(i -> logList.get(i).id.equals(logid))
.collect(Collectors.toList());
for (int i = 0; i < allIndexes.size(); i++) {
System.out.println(logList.get(i).checkData());
}
}
所以我已经害怕试图从这个混乱中得到一个日期范围。
我在这里做错了什么?如何改进?感谢您的任何帮助。
差点忘了,checkData 是我的 LogEntry 类中的一个函数:
public String checkData() {
return " > " + this.date + " " + this.status + " " + this.id + " " + this.cod;
}
解决了,谢谢@JB Nizet 和@Deadpool
状态:
logList.stream().filter(i -> i.status.equals(logLevel)).forEach(j -> System.out.println(j.checkData()));
身份证:
logList.stream().filter(i -> i.id == logid).forEach(j -> System.out.println(j.checkData()));
为了进一步处理收集到的数据,我只是将它发送到一个新的 arrayList。
状态:
ArrayList<LogEntry> logLevels = new ArrayList();
logList.stream().filter(i -> i.status.equals(logLevel)).forEach(j -> logLevels.add(0, j));
解决方案
我认为IntStream
这不是一个好主意,而不是直接流式传输logList
对象以获取重复项
基于状态过滤并打印重复值
logList.stream().filter(i->i.getStatus().equals(logLevel)).forEach(j->System.out.println(j.checkData());
基于 id 过滤并打印重复值
logList.stream().filter(i->i.getId==logid).forEach(j->System.out.println(j.checkData());
推荐阅读
- arrays - 通过解析 systemd-resolve 输出生成 YAML
- android - “允许创建”不适用于 Firestore 规则中的某些集合
- r - 使用 element_blank 时向 ggplot 添加实验室
- javascript - JSON:如果它具有特定值,则获取 json 数组
- c# - 在什么情况下我们必须在 linq Query 中使用扩展方法 AsEnumerable() 和 ToList()
- scala - 在 Slick 中按通用参数分组
- c++ - 如何在 Solaris 10 上替换 posix_memalign
- java - Android Configuration Changes 导致布局方向改变
- apache-spark - 使用 Pyspark 创建具有特定长度的 unique_id
- time - Qlik 感觉。时间过滤器