首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在java中模拟属性选择器?

有没有办法在java中模拟属性选择器?
EN

Stack Overflow用户
提问于 2019-05-05 15:28:10
回答 3查看 67关注 0票数 1

在C#中,我们可以选择使用属性选择器来指定对象的属性(例如,当使用LINQ时),如下所示:

代码语言:javascript
运行
复制
var usernames = customers.Where(x => x.Age > 20).Select(x => x.Username);

在这里,我们首先选择要执行比较的属性Age,然后将属性Username指定给Select(...)子句。

我目前正在尝试使用Java中的lambda表达式来复制此功能,以使我的代码用户能够指定哪个属性应用于以后的某些操作。最终结果应该类似于以下内容:

代码语言:javascript
运行
复制
public class Builder<T> {

// ...
private Field field;

Builder<T> forField(SomeFunctionalInterface s) {
    this.field = s.evaluate();
    return this;
 }
// ...
}

感谢您的努力。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-05 15:47:45

下面的示例将在编译时不会出错:

代码语言:javascript
运行
复制
public void test() {
  from(Customer.class).where(c -> c.getAge() > 20).select(Customer::getUserName);
}

public <T> Builder<T> from(Class<T> cls) {
  return new Builder<>(cls);
}

public class Builder<T> {
  private Class<T> cls;

  public Builder(Class<T> cls) {
    this.cls = cls;
  }

  public Builder<T> where(Predicate<T> predicate) {
    // store predicate
    return this;
  }

  public Builder<T> select(Function<T, Object> field) {
    // store field selector
    return this;
  }
}

public class Customer {
  private String userName;
  private int age;

  public int getAge() {
    return age;
  }

  public String getUserName() {
    return userName;
  }
}

但是,您不能直接访问private字段,您需要为它们提供一个getter。

票数 2
EN

Stack Overflow用户

发布于 2019-05-05 20:07:45

您可以使用流API来实现以下功能:

代码语言:javascript
运行
复制
customers.stream().filter(customer => customer.getAge() > 20).map(Customer::getUserName).collect(Collectors.toList())
票数 0
EN

Stack Overflow用户

发布于 2019-05-15 09:05:31

我是Linq to Objects(Java)的作者。您可以使用lombok和Linq来实现这一点。

代码语言:javascript
运行
复制
val result = Linq.asEnumerable(customers).where(customer -> customer.getAge() > 20).select(customer -> customer.getUserName());

lombok

Linq

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55989763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档