public static void main (String args[]){ Predicate<String> preFilter = new Predicate<String>(){ @Override public boolean apply(String user) { return StringUtils.equals(user,"1"); } }; List<String> cl = Lists.newArrayList(); cl.add("1"); cl.add("1"); cl.add("1"); cl.add("2"); cl.add("1"); List<String> cl2=Lists.transform(cl, new Function<String, String>() { @Override public String apply(String string) { if(StringUtils.equals(string,"1")){ return string; }else { return null; } } }); System.out.println(cl2); List<String> cl3 = Lists.newArrayList(); for (String u:cl) { if (preFilter.apply(u)) { cl3.add(u); } } System.out.println(cl3); }
结果如下
[1, 1, 1, null, 1] [1, 1, 1, 1]
这里实际是采用一个镜像,也就说,当你真正去调用cl2的时候,apply()里面的内容才会被执行,所以cl2实际上不可修改的。