与lambdaj不区分大小写的过滤(Case Insensitive filtering with

2019-10-31 18:47发布

我试图用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));
}

我怎样才能使匹配器不关心呢? 即我想在L2其不在L1不论情况下,项目的列表? 我宁愿不用再跑LAMBDA为字符串的每个列表转换为相同的情况下,而是一种方式来修改匹配器做如我所愿。 这是可能的还是我的第一个项目转换为相同的情况下?

Answer 1:

这对我的作品:

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);

输出是[Obiwan]



Answer 2:

希望这个答案可以帮助你:

    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]


文章来源: Case Insensitive filtering with lambdaj