小编Pan*_*s K的帖子

可选vs if / else-if性能Java 8

您好,我有两个代码示例

if / else if / else语句

private Object getObj(message) {
        if (message.getA() != null)
            return message.getA();
        else if (message.getB() != null)
            return message.getB();
        else if (message.getC() != null)
            return message.getC();
        else return null;
}
Run Code Online (Sandbox Code Playgroud)

可选陈述

private Optional<Object> wrap(Object o){
    return Optional.ofNullable(o);
}

private Object getObj(message) {
    return  wrap(message.getA())
            .orElseGet(() -> wrap(message.getB())
            .orElseGet(() -> wrap(message.getC())
            .orElse(null)));
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这两者在性能方面如何比较(我在实际代码中大约有15-20条if-else语句)?

值得重构代码的可读性和性能,还是滥用可选选项?

另外,如果if / else-if语句增长到100+,性能损失会是多少?

提前致谢

java performance if-statement optional java-8

10
推荐指数
4
解决办法
564
查看次数

从Java中的对象获取类列表

Iam当前正在尝试创建一个List<Class> classList包含对象的所有类的类。

DemoObject.java

public class DemoObject {

    private Integer id;
    private String name;
    private BigDecimal price;
    private Boolean isActive;
    private List<NestedDemoObject> nested;
}
Run Code Online (Sandbox Code Playgroud)

NestedDemoObject.java

public class NestedDemoObject {

    private Integer id;
    private String nameNest;
    private Boolean isActive;
}
Run Code Online (Sandbox Code Playgroud)

我要创建的是一种方法public List<Class> getDistinctClasses(Class cl);,您可以将其作为输入,例如DemoObject.class返回一个列表

[DemoObject.class, Integer.class, String.class, BigDecimal.class, Boolean.class, List.class, NestedDemoObject.class]

另一个例子NestedDemoObject.class

[NestedDemoObject.class, Integer.class, String.class, Boolean.class]

我试图在没有运气的情况下使用.getDeclaredClasses()from Class。有什么方法可以使用Reflection API从对象获取所有嵌套类?

任何帮助或指导表示赞赏。

java reflection class

6
推荐指数
1
解决办法
1745
查看次数

如何流式传输一系列 BigIntegers?

您好,我目前有这段代码用于查找工作正常的阶乘

public static BigInteger factorial(BigInteger n) {
    BigInteger sum = BigInteger.ONE;
    for (BigInteger i = BigInteger.ONE; i.compareTo(n) <= 0; i = i.add(BigInteger.ONE)) {
        sum = sum.multiply(i);
    }
    return sum;
}

Run Code Online (Sandbox Code Playgroud)

我想要实现的是将其转换为 aStream<BigInteger>并像这样写

public static BigInteger factorial(BigInteger n) {
    return getBigIntegerStream(n).reduce(BigInteger.ONE, BigInteger::multiply);
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何获得Stream<BigInteger>类似于如何声明IntStream?

IntStream.range(1, myInt);
Run Code Online (Sandbox Code Playgroud)

java biginteger java-stream

5
推荐指数
1
解决办法
1865
查看次数

无法使用 http 模块 nodejs azure 函数执行 http 请求

我正在尝试http使用 javascript 在 azure 函数上使用节点模块发出 http 请求,但由于某种原因http.request没有接收数据(没有错误打印,就像请求被阻止一样)。azure 配置或代码有什么问题吗?我错过了一些非常明显的东西吗?

代码在本地 js 文件上运行良好

context.log('JavaScript timer trigger function ran!', timeStamp); 按预期打印但context.log("SUCCESS", JSON.parse(data));根本没有打印。

还尝试了不同的库(请求、axios)但没有成功


    module.exports = async function (context, myTimer) {
        var timeStamp = new Date().toISOString();

        if (myTimer.IsPastDue)
        {
            context.log('JavaScript is running late!');
        }
        context.log('JavaScript timer trigger function ran!', timeStamp);  

        const http = require('http');
        http.get('http://myAPIurl', (resp) => {
        let data = '';

        // A chunk of data has been recieved.
        resp.on('data', (chunk) => {
          data += chunk;
        }); …
Run Code Online (Sandbox Code Playgroud)

javascript http azure node.js azure-functions

2
推荐指数
1
解决办法
1883
查看次数