当前位置: 首页 > 面试题库 >

如何使用方法参考/ java概括实用程序功能8

谭桐
2023-03-14
问题内容

我遇到了一种常见情况,我有一个对象列表,并且需要生成一个具有单个属性的逗号分隔的字符串,然后每个字符串都用单引号引起来。

2个例子

public String partIDsToString(List<Part> parts){
    StringBuilder sb = new StringBuilder();
    for(Part part : parts)
        sb.append("'"+part.getPartNumber() + "',");
    return sb.substring(0,sb.length()-1);
}

public String companyIDsToString(List<Company> parts){
    StringBuilder sb = new StringBuilder();
    for(Company c : parts)
        sb.append("'"+c.getId() + "',");
    return sb.substring(0,sb.length()-1);
}

将来我将需要创建更多这样的方法,并且想知道是否有一种方法可以泛化此功能,而我正在寻找这样的东西。

public String objectPropertyToString(List<Object> list, Method getProperty){
    StringBuilder sb = new StringBuilder();
    for(Object obj: list)
        sb.append("'"+obj.getProperty() + "',");
    return sb.substring(0,sb.length()-1);
}

List<Company> companies = getCompaniesList();//not important
String result = objectPropertyToString(companies , Company::getId);

List<Part> parts= getPartsList();//not important
String result = objectPropertyToString(parts, Part::getPartNumber);

可以使用方法引用/ lambdas或任何其他方式来完成此操作吗?


问题答案:

Stream.map()并且Collectors.joining()是你的朋友在这里。

companies.stream()
         .map(Company::getId)
         .map(s -> "'" + s + "'")
         .collect(joining(","));

您可以创建一个辅助方法,但是根据我的判断,以上内容很简洁,不值得:

static <T> String mapAndJoin(Collection<T> c, Function<T,String> f){
    return c.stream()
            .map(f)
            .map(s -> "'" + s + "'")
            .collect(joining(","));
}

mapAndJoin(companies, Company::getId);


 类似资料:
  • 助手代码实用方法 这些方法会帮你更轻松地实现自定义助手代码。 Handlebars.SafeString(string) 防止 string 在模版渲染时转义。 new Handlebars.SafeString("<div>HTML Content!</div>"); 当构建将会被标记为安全的字符串时,为安全起见,任何外部内容都应该使用 Handlebars.escapeExpression

  • 问题内容: Java8中是否有一种方法可以将方法引用用作对象来使用其方法,例如: 这个问题与无关,仅作为示例,我想对方法参考有答案 问题答案: 您可以编写一个静态方法来执行此操作: 然后,您可以将其放在实用程序类中并静态导入。 或者,创建一个更简单的静态方法,该方法 只 返回给定的函数,以使编译器知道您在做什么:

  • “String::contains”是错误的。但是如何表达lambda呢? 此外,当我在IntelliJ IDEA中写这篇文章时: obj。testPredicate(列表,字符串::contains); 我得到的错误在"字符串::c":非静态方法不能被引用从一个静态的上下文。我被这些提示弄糊涂了。 我的代码如下: 这是来电者: 为什么最简单的lambda不能被方法引用替换? 我看到了使用方法引用

  • 问题内容: 请看下面的代码: 此方法有效,但是方法名称作为字符串传递,因此即使myMethod不存在,也可以编译。 另一方面,Java 8引入了方法引用功能。在编译时检查它。可以使用此功能获取方法信息吗? 完整示例: 换句话说,我想要一个等效于以下C#代码的代码: 问题答案: 没有可靠的,受支持的方式来执行此操作。你将方法引用分配给功能接口的实例,但是该实例是由编写的,无法深入到该实例中以查找最初

  • 问题内容: 我试图找到一种有效,正常或简单的方法来将缓动函数实现到我的Java程序中。我已经启用了缓动功能,但是我觉得 有一种更有效的方法可以实现;我看不到的那一个,可能是因为隧道视线。这是我的代码;有人可以向我展示我应该做些什么吗?或为我指明进行研究的方向 我尝试为在线发现的线性缓动函数实现calc()方法,但是它实际上是无用的,因为 除非被迫将方程式直接插入到行中,否则我无法使它起作用。 问题

  • 问题内容: 不是Java中的关键字。JVM如何知道将方法作为任何程序的起点执行? 问题答案: 不需要是Java中的关键字即可让JVM在执行开始时查找它。与其他也称为的方法或变量没有冲突。这就是JVM规范的设计方式。它很可能是从c语言借来的。 Java规范参考:关键字,调用main。