Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于lambdaj的不区分大小写滤波_Java_Lambda_Matcher_Hamcrest_Lambdaj - Fatal编程技术网

Java 基于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"

我正在尝试熟悉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");
  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->[相同,上部,下部]

最简单的方法是只对单个元素使用小写/大写,而不是对问题中的多列表(动态),我只是为问题创建了最小的可复制测试用例。