我一直在尝试搜索,但似乎找不到关于如何将Linq4j用于存储在java.util.Map中的内存数据的示例。

有人可以找到一些有关如何使用Linq4j的链接或示例吗?

最佳答案

Linq4j对使用列表具有良好的支持。例如net.hydromatic.linq4j.Linq4j.asEnumerable(List)(有关更多方法,请参见javadoc http://www.hydromatic.net/linq4j/apidocs/net/hydromatic/linq4j/Linq4j.html)。

final List<Employee> employees = Arrays.asList(
    new Employee(100, "Fred", 10),
    new Employee(110, "Bill", 30),
    new Employee(120, "Eric", 10),
    new Employee(130, "Janet", 10));
final List<Employee> result = new ArrayList<Employee>();
Linq4j.asEnumerable(employees)
    .where(
        new Predicate1<Employee>() {
          public boolean apply(Employee e) {
            return e.name.contains("e");
          }
        })
    .into(result);


对Map的支持并不多。您可以使用Map上生成集合的方法:Map.keySet(),Map.values()和Map.entrySet()。例如,

final List<Grouping<Object, Map.Entry<Employee, Department>>> result =
  new ArrayList<Grouping<Object, Map.Entry<Employee, Department>>>();
Linq4j.asEnumerable(empDepts.entrySet())
    .groupBy(
        new Function1<Map.Entry<Employee, Department>, Object>() {
          public Object apply(Map.Entry<Employee, Department> entry) {
            return entry.getValue();
          }
        })
    .into(result);


最后,请注意,Enumerable中有几个toMap方法。这些对于填充地图很有用。

10-07 19:01