Tag: functional programming

使用Java 8 Lambda表达式将String数组转换为Map

是否有更好的function方式使用Java 8 lambda语法将“key:value”forms的字符串数组转换为Map ? Arrays.asList(“a:1.0”, “b:2.0”, “c:3.0”) .stream() .map(elem -> elem.split(“:”) .collect(Collectors.toMap(keyMapper?, valueMapper?)); 我现在的解决方案似乎没有真正的function: Map kvs = new HashMap(); Arrays.asList(“a:1.0”, “b:2.0”, “c:3.0”) .stream() .map(elem -> elem.split(“:”)) .forEach(elem -> kvs.put(elem[0], Double.parseDouble(elem[1])));

用Java-8 Streams替换’for’循环中的if-else

我有以下简单的代码,我试图转换为function样式 for(String str: list){ if(someCondition(str)){ list2.add(doSomeThing(str)); } else{ list2.add(doSomethingElse(str)); } } 是否可以用流替换这个循环? 我看到的唯一选择是使用两个不同的过滤条件迭代流两次。

Java 8中的方法引用是否具有具体类型,如果是,它是什么?

这个问题与另一个问题密切相关。 但是,我觉得这个问题的公认答案并不是那么明确。 那么,Java 8中方法引用的类型是什么? 这里有一个关于如何将方法引用“强制转换”(解除?)到java.util.function.Function演示: package java8.lambda; import java.util.function.Function; public class Question { public static final class Greeter { private final String salutation; public Greeter(final String salutation) { this.salutation = salutation; } public String makeGreetingFor(final String name) { return String.format(“%s, %s!”, salutation, name); } } public static void main(String[] args) { final Greeter helloGreeter = […]

IntStream逐步迭代

如何使用IntStream在步骤(3)中迭代一系列数字(0-100)? 我试过iterate ,但这永远不会停止执行。 IntStream.iterate(0, n -> n + 3).filter(x -> x > 0 && x < 100).forEach(System.out::println)

根据独立谓词流式传输集合并收集到多个结果

我正在盯着一些命令式的代码,我试图将其转换为纯粹的function性风格。 基本上在inputSet有一个迭代for循环,我在其中检查3个谓词并根据哪个谓词匹配填充3个outputSets 。 输出集可以重叠。 如何使用Java 8流/ map / filter /等以纯函数方式执行此操作?

C#中的协方差有哪些? (或者,协方差:例如)

协方差(大致)是在使用它们的复杂类型中镜像 “简单”类型的inheritance的能力。 例如,我们总是可以将Cat的实例视为Animal一个实例。 如果ComplexType是协变的,则ComplexType可以被视为ComplexType 。 我想知道:协方差的“类型”是什么,它们如何与C#相关(它们是否受支持?) 代码示例会很有帮助。 例如,一种类型是返回类型协方差 ,由Java支持,但不支持C#。 我希望有function编程印章的人也可以加入!

Java 8 Streams:根据不同的属性多次映射同一个对象

我的同事向我提出了一个有趣的问题,我无法找到一个整洁而漂亮的Java 8解决方案。 问题是流过POJO列表,然后根据多个属性在地图中收集它们 – 映射导致POJO多次出现 想象一下以下POJO: private static class Customer { public String first; public String last; public Customer(String first, String last) { this.first = first; this.last = last; } public String toString() { return “Customer(” + first + ” ” + last + “)”; } } 将其设置为List : // The list of customers List […]

JUnit 4:在测试运行之前在测试套件中设置东西(比如测试的@BeforeClass方法,仅​​用于测试套件)

我想在(restful)webservice上做一些function测试。 testsuite包含一堆测试用例,每个测试用例在webservice上执行几个HTTP请求。 当然,Web服务必须运行或测试失败。 🙂 启动Web服务需要几分钟(它会解决一些繁重的数据),因此我希望尽可能不频繁地启动它(至少所有只有来自服务的GET资源可以共享一个的测试用例)。 那么在测试运行之前,有没有办法在测试套件中设置炸弹,就像测试用例的@BeforeClass方法一样?

Java 8函数式编程中’reduce’函数的第三个参数的目的

在什么情况下,在Java 8流中调用’reduce’的第三个参数? 下面的代码尝试遍历字符串列表并添加每个字符串的第一个字符的代码点值。 似乎永远不会使用最终lambda返回的值,如果插入println,它似乎永远不会被调用。 该文档将其描述为“组合器”,但我无法找到更多细节…… int result = data.stream().reduce(0, (total,s) -> total + s.codePointAt(0), (a,b) -> 1000000);

为什么@FunctionalInterface不能在JDK中符合条件的所有接口上使用?

Java 8为我们提供了许多有趣的方法来使用function接口,并为它们提供了一个新的注释: @FunctionalInterface 。 如果我们不遵守function接口的规则(只需要一个需要覆盖的抽象方法),它的工作就是告诉编译器对我们大喊大叫。 java.util.function包中有43个接口,带有此批注。 搜索@FunctionalInterface的jdk.1.8.0 / src只能获得57次点击。 为什么可能添加@FunctionalInterface的其他接口(如AutoCloseable)仍然缺少它? 注释文档中有一些模糊的提示: “用于指示接口类型声明旨在成为function接口的信息性注释类型” 有没有什么好的理由不打算我设计的接口(可能只是一个function接口)不能用作一个接口? 除了没有意识到它可能被添加之外,是否有任何迹象? 是不是将抽象方法添加到任何已发布的接口来阻止实现它的任何人,function与否? 我觉得玩世不恭,假设他们只是懒得去追捕他们,但其他解释是什么? 更新 :在查看“应该’可比’是’function界面’后?” 我发现我仍然有唠叨的问题。 当单一方法接口和function接口在结构上相同时,它们会有什么不同? 简单的名称是不同的? Comparable和Comparator在语义上足够接近。 事实certificate它们在结构上是不同的,但仍然不是最好的例子…… 是否有一种情况,SMI在结构上很好用作function接口,但仍然不鼓励接口名称和方法的语义含义? 或者也许是Javadocs隐含的合同?