- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个值列表:
{("1", "3"),("1", "5"),("3", "13")("5", "4"),("1", "7"),("8", "9"),("9", "1"),("1", "23"),("5", "7")}
以及必须应用于每个元素“1:3,3:13,5:-”的过滤器。我需要获取另一个列表,其中包含与过滤器匹配的值。在这种情况下,结果应该是:
值:1 3值:3 13值:5 4值:5 7
在过滤器中,此值 5:- 表示它匹配第一个元素,并且不考虑第二个值,因此任何以 5 开头的元素都可以。
import java.util.*;
import java.util.Set;
import java.util.stream.Collectors;
class Filter {
private String valueFilter1;
private String valueFilter2;
public Filter(String valueFilter1, String valueFilter2) {
this.valueFilter1 = valueFilter1;
this.valueFilter2 = valueFilter2;
}
public Filter(String fil) {
String[] filResult = fil.split(":");
this.valueFilter1 = filResult[0];
this.valueFilter2 = filResult[1];
}
public String getValueFilter1() {
return valueFilter1;
}
public String getValueFilter2() { return valueFilter2; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Filter that = (Filter) o;
return Objects.equals(valueFilter1, that.valueFilter1) &&
Objects.equals(valueFilter2, that.valueFilter2);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((valueFilter1 == null) ? 0 : valueFilter1.hashCode());
result = prime * result + ((valueFilter2 == null) ? 0 : valueFilter2.hashCode());
return result;
}
}
public class FilterUtils {
private static void filterMessages(List<Filter> eventsParam, String type) {
Set<Filter> filter1 = new HashSet<>();
Set<String> filter2 = new HashSet<>();
Arrays.stream(type.split(","))
.forEach(f -> {
if (f.contains("-"))
filter2.add(f.split(":")[0]);
else
filter1.add(new Filter(f));
});
// This following logic is in another method called processMessage().
// So I'm trying to return both filters as in processMessage I have something like this:
// .stream()
// .filter(e -> filterMessages(eventsParam).contains(new Filter(e.getValueFilter1(), e.getValueFilter2()))
// .collect(Collectors.toList());
// the real method filterMessages only receives List<Filter> eventsParam as argument
// I was thinking of returning a map of Set like this Map<String, Set<Object>> or Map<String, Set<T>> but it didn't work
// map.put("filter1", filter1);
// map.put("filter2", filter2);
// Not sure how to make it work
List<Filter> result = eventsParam
.stream()
.filter(e -> filter1.contains(new Filter(e.getValueFilter1(), e.getValueFilter2())) |
filter2.contains(e.getValueFilter1()))
.collect(Collectors.toList());
for (Filter r: result) {
System.out.println("Values: " + r.getValueFilter1() + " " + r.getValueFilter2());
}
}
public static void main(String[] args) {
List events = new ArrayList<Filter>();
events.add(new Filter("1", "3"));
events.add(new Filter("1", "5"));
events.add(new Filter("3", "13"));
events.add(new Filter("5", "4"));
events.add(new Filter("1", "7"));
events.add(new Filter("8", "9"));
events.add(new Filter("9", "1"));
events.add(new Filter("1", "23"));
events.add(new Filter("5", "7"));
filterMessages(events, "1:3,3:13,5:-");
}
}
到目前为止,我拥有的代码可以工作,但我认为这种方法有点复杂,而且不允许我将其适应我当前拥有的现有代码。任何想法?或者面对这个更好的方法?谢谢
最佳答案
我建议您在代码审查网站上提出这个问题:https://codereview.stackexchange.com/ .
简单地说:
1) 构造函数 Filter(String valueFilter1, String valueFilter2)
不是必需的。
2) 尽管代码有效,但 equals()
的这种定义在其他情况下可能会导致错误:
Filter a = new Filter("1", "2");
Filter b = new Filter("-", "2");
Filter c = new Filter("5", "2");
System.out.println(a.equals(b)); // true
System.out.println(b.equals(c)); // true
System.out.println(a.equals(c)); // false
按照常识,如果a = b且b = c,那么一定是a = c。但就你而言,事实并非如此。在实际应用程序中,这可能会导致难以发现的错误。
关于java - 带有字符串键和值集<T>的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252074/
我在 php 方面遇到了一个小问题,我发现很难用语言来解释。我有一个包含键值的关联数组。我想制作一个函数(或者如果已经有一个函数),它将一个数组作为输入并删除重复项,但两种方式都是如此。 例如: 在我
我有一个在系统托盘中运行的应用程序,是否可以允许用户通过 C# 中的 Windows 键 + 键 恢复该应用程序? 谢谢 最佳答案 是的,使用 Windows API。我认为 Windows 键与 C
我正在使用 Waterline通过 Sails 查询 MySQL 数据库。我找到了 2 种方法。 不知道哪个更好? 顺便问一下,如何处理这两种情况的错误? 1. Model.findOne().whe
我正在尝试测试是否按下了 Alt 键。 我的支票类似于: private void ProcessCmdKey(Keys keyData) { if (keyData == Keys.Alt) {
我正在使用 Selenium WebDriver 和 Ruby 进行自动化测试。我需要点击一个按钮。我无法通过 id 或 css 或 xpath 获取按钮元素,因为按钮是透明的。我想使用 Tab 和
我是 IntelliJ 的新手,我看到一个启动提示说,“任何工具窗口中的 ⎋ 键都会将焦点移动到编辑器。”但是,我不知道⎋键是什么。我一直在编程很长时间。我的键盘上可能有一个我多年来一直错过的键吗?
我使用 OMDB API 创建了一个电影搜索页面。我遇到的问题是,如果我搜索一部包含多个单词的电影,此 API 会出错,因为 API 的 URL 必须在 URL 中的每个单词之间有 + 键。所以我想知
我已经用 Elasticsearch 玩了大约一天了,所以我非常陌生。我正在尝试 POST/import 一个简单的文件: { "compression" : "none", "com
enter image description here 在此示例中,要记录带有“title”和“director”键的属性值,使用 obj[key]。因为我们已经处于对象的执行上下文中:在本例中是电
我是新开类。 我使用新的电子邮件 ID 和密码在 openshift 上创建了一个项目。让我们称之为 firstApp 。我做了 rhc 设置和我的 ssh key 与我的项目相关联。 我的 frie
当我使用 Jackson 反序列化 json 字符串时,我通常不想创建所有 bean 类的属性,而且我只需要一些 json 字符串的字段,其他字段我不需要。所以我经常只在我需要的 java 类 bea
我想编写一个带有 keys/keys* 的规范,但能够内联值规范,但不支持 by design ,我明白了其背后的原因。然而,有时,本地图存在特定上下文时,您确实希望(或者只是通过遗留或第三方)键和值
my %fruit_colors = ("apple", "red", "banana", "yellow"); my @fruits = keys %fruit_colors; my @colors
我正在使用 vb.net 2008 和 DataGridView。我正在寻找允许我将 enter 键移动到右侧的下一列而不是在保持在同一列时向下移动一行的代码。 最佳答案 如果您正在确认编辑,只需移动
我刚刚开始学习编码,我遇到了这个我无法理解的问题。 “我们将添加的第二个函数称为搜索,它将以名字作为参数。它将尝试将收到的名字与我们 friend 联系人列表中的任何名字相匹配。如果它找到匹配项,就会
我已经在 Python 中运行了下面的代码,以从文本文件中生成单词列表及其计数。我该如何从“Frequency_list”变量中过滤掉计数为 1 的单词? 另外,如何将底部的打印语句循环导出到CSV
我正在尝试 XSLT 中的查找表示例,但无法使其正常工作
是否可以在 Javascript/Typescript 中编写一个将参数名称/键作为字符串返回的函数? function foo(arg) {...} let user = new User(); f
我正在尝试创建一个带有键/值的对象,但是当我看到该对象时,键没有正确填充.. 我希望键是 - 0,1,2,3 但它显示“索引”作为键。 > categories = ["09/07/2016 00:0
将 Android Studio 从 1.5 升级到 2.0 后,模拟器(现在版本为 25.1.1,我在其上配置了模拟硬件键盘)不再将 [Esc] 键识别为等同于 [Back] 按钮。 如何恢复这个有
我是一名优秀的程序员,十分优秀!