小编Sai*_*uri的帖子

分发管理vs存储库下的存储库标记?

我看到repository父元素下的标签即distributionManagementrepositories.有什么不同 ?

<distributionManagement>
    <repository>
        <id>...</id>
        <name>...</name>
        <url>...</url>
    </repository>
</distributionManagement> 

<repositories>
    <repository>
        <id>...</id>
        <name>...</name>
        <layout>default</layout>
        <url>...</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

我在repository元素下的理解 元素distributionManagement指定在部署时它将部署工件的位置.它只会在mvn deploy部署时间而不是在mvn install构建时间期间进入画面.对?

repositoryrepositories元素下的元素指定需要从哪里获取依赖项.只有在mvn install没有的时候它才会出现mvn deploy.对?

maven

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

Java 8 Streams&lambdas维护严格的FP

Java 8 lambdas在许多情况下非常有用,可以以紧凑的方式以FP方式实现代码.
但是在某些情况下我们可能不得不访问/改变外部状态,这不是FP实践中的好习惯.
(因为Java 8 Functional接口有严格的输入和输出签名,我们无法传递额外的参数)

例如:

class Country{
        List<State> states;
    }
    class State{
        BigInt population;
        String capital;
    }

    class Main{
        List<Country> countries;

        //code to fill
    }
Run Code Online (Sandbox Code Playgroud)

假设用例是获取所有国家的所有州和所有州的所有州的名单

正常的实施:

List<String> capitals = new ArrayList<>();
BigInt population = new BigInt(0);

for(Country country:countries){
    for(State state:states){
        capitals.add(state.capital);
        population.add(state.population)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何以更优化的方式实现Java 8 Streams?

Stream<State> statesStream = countries.stream().flatMap(country->country.getStates());

    capitals = statesStream.get().collect(toList());
    population = statesStream.get().reduce((pop1,pop2) -> return pop1+pop2);
Run Code Online (Sandbox Code Playgroud)

但是上面的实现效率不高.使用Java 8 Streams操作多个集合的其他更好的方法

java lambda functional-programming java-8 java-stream

3
推荐指数
1
解决办法
109
查看次数