Java 基于lambdaj的不区分大小写滤波
我正在尝试熟悉lambdaj,不确定如何解决这个问题。考虑到以下测试:Java 基于lambdaj的不区分大小写滤波,java,lambda,matcher,hamcrest,lambdaj,Java,Lambda,Matcher,Hamcrest,Lambdaj,我正在尝试熟悉lambdaj,不确定如何解决这个问题。考虑到以下测试: @Test public void test() { final List<String> l1 = new ArrayList<>(); final List<String> l2 = new ArrayList<>(); l1.add("same"); l1.add("Upper"); l1.add("lower"); l2.add("same"
@Test
public void test() {
final List<String> l1 = new ArrayList<>();
final List<String> l2 = new ArrayList<>();
l1.add("same");
l1.add("Upper");
l1.add("lower");
l2.add("same");
l2.add("upper");
l2.add("lower");
l2.add("extra");
final List<String> l3 = Lambda.filter(Matchers.not(Matchers.isIn(l1)), l2);
Assert.assertThat("There should be one item in l3", l3.size(), Matchers.equalTo(1));
}
@测试
公开无效测试(){
最终列表l1=新的ArrayList();
最终列表l2=新的ArrayList();
l1.添加(“相同”);
l1.添加(“上限”);
l1.添加(“较低”);
l2.添加(“相同”);
l2.添加(“上限”);
l2.添加(“较低”);
l2.添加(“额外”);
最终列表l3=Lambda.filter(Matchers.not(Matchers.isIn(l1)),l2);
Assert.assertThat(“l3中应该有一个项”,l3.size(),Matchers.equalTo(1));
}
我怎样才能让媒人不在乎这个案子?i、 我想要一个l2中的项目列表,这些项目不在l1中,无论大小写如何?我不希望运行另一个Lambda来将每个字符串列表转换为相同的大小写,而是希望使用一种方法来修改Matcher,以便按照我的意愿进行操作。这是可能的,还是我必须先将项目转换为相同的大小写?这对我很有用:
import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;
//..
List<String> allJedis = asList("Luke","Obiwan","Yoda");
List<String> someJedis = filter(equalToIgnoringCase("obiwan"), allJedis);
System.out.println(someJedis);
import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;
//..
列出所有绝地武士=列为名单(“卢克”、“欧比旺”、“尤达”);
列出一些绝地=过滤器(equalToIgnoringCase(“obiwan”),所有绝地;
System.out.println(某些绝地);
输出为
[Obiwan]
希望此答案能帮助您:
List<String> convert = convert(list1, new Converter<String, String>() {
@Override
public String convert(String from) {
return from.toLowerCase();
}
});
List<String> filter2 = filter(isIn(list2), convert);
System.out.println("filter2 -> " + filter2);
// filter2 -> [same, upper, lower]
List convert=convert(列表1,新转换器(){
@凌驾
公共字符串转换(字符串从){
从.toLowerCase()返回;
}
});
列表过滤器2=过滤器(isIn(列表2),转换);
System.out.println(“filter2->”+filter2);
//过滤器2->[相同,上部,下部]
最简单的方法是只对单个元素使用小写/大写,而不是对问题中的多列表(动态),我只是为问题创建了最小的可复制测试用例。