我正在尝试熟悉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));
}
如何让Matcher不关心案件?即我想要一个l2中不属于l1的项目列表?我宁愿不必再运行另一个Lambda来将每个字符串列表转换为相同的情况,而是根据我的意愿修改Matcher的方法。这是可能的还是我必须先将项目转换为相同的案例?
答案 0 :(得分:0)
这对我有用:
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]
答案 1 :(得分:0)
希望这个答案可以帮到你:
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]