Tag: lambda

创建一个方法,接受可变长度的Function参数,可能有不同的类型

假设我有一个字符串: String s = “1,2,3,4,5,6” 。 我想创建一个方法combineFunctions() ,它将Function s的可变长度序列作为参数,并按该顺序应用所有操作。 这些函数可能有不同的类型。 这种function的示例用法如下: Combine c = new Combine(s); List numbers = c.combineFunctions(splitByComma); Integer max = c.combineFunctions(splitByComma,convertToInt, findMax); 我尝试了什么(这里的在这里没什么用处): public void combineFunctions( Function… functions) { } 但我坚持要获得Function的最后一个类型。 我也在考虑递归方法,但varargs参数必须是最后一个。 是否有可能在Java中实现这样的方法?

Java 8中的递归lambda表达式

我只想递归地定义一个Java 8 lambda表达式。 Lambda FAQ提到只能在(静态)字段初始化期间定义递归lambda表达式。 但是我在IntelliJ中遇到编译器错误(javac只报告没有消息的错误): java:初始化程序中的自引用 如果我尝试写类似的东西: static UnaryOperator f = i -> i == 0 ? 1 : i * f.apply( i – 1); 要么 UnaryOperator f = i -> i == 0 ? 1 : i * f.apply( i – 1); 我发现使其工作的一种方法是使用数组来引用lambda有效地欺骗java编译器: import java.util.function.UnaryOperator; public class RecursiveLambdaExample { public static void main(String[] […]

使用Lambdas时,Maven插件构建失败

我写了一个maven插件/ mojo来生成一些代码。 该插件运行良好,并使用Java JDK 1.8构建。 我看到了一些奇怪的行为:它构建,安装等等,如果我使用1.8之前的语法,但是只要我使用Java 8 Lambda表达式,我在执行mvn clean install时会收到以下错误: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project my-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 13557 -> [Help 1] 这是我的pom: 4.0.0 com.my.group.id my-maven-plugin maven-plugin 1.0-SNAPSHOT My Maven Mojo http://maven.apache.org 4.0.1.RELEASE 2.3 org.apache.maven.plugins maven-compiler-plugin 3.2 1.8 1.8 org.apache.maven.plugins maven-plugin-plugin 3.2 true mojo-descriptor descriptor inin-release ININ […]

Java 8 Lambdas – 相当于c#OfType

我现在正在学习新的Java 8function,经过4年专门在C#世界,所以lambdas对我来说是最重要的。 我现在正在努力找到C#的“OfType”方法的等价物。 我所拥有的是List myNodes,我想从中获取一个List,其中Node是一个接口,而SpecificNode正在实现它。 在C#中它会是 IList myNodes = new List(){new SpecificNode(), new OtherNode()} IList specificNodes = myNodes.OfType()

我是否可以在Java 8中将Clojure函数用作Lambdas?

我在Clojure中使用了许多库来生成符合“ clojure.lang.IFn ”接口的更高阶函数。 它有多个arity重载,即界面看起来像: public interface IFn extends Callable, Runnable{ public Object invoke() ; public Object invoke(Object arg1) ; public Object invoke(Object arg1, Object arg2) ; public Object invoke(Object arg1, Object arg2, Object arg3) ; …. etc. public Object applyTo(ISeq arglist) ; } 我能否在Java 8中直接使用这种类型的对象作为可调用的lambda函数?

Java 8 lambda和带抽象类的接口扩展

假设我想声明Spring的RowMapper ,但不是创建动态类,而是实现一个实现RowMapper的抽象类。 这是我的方法签名: SqlProcedure#declareRowMapper(RowMapper rowMapper); CustomRowMapper.java: public abstract class CustomRowMapper implements RowMapper { protected A a = new A(); } 旧的Java方式是写: sqlProc.declareRowMapper(new CustomRowMapper() { @Override public Object mapRow(ResultSet rs, int rowNum) { a.doSomething(rs, rowNum); return new Object(); } }); 是否有可能用lambda表达式实现相同的function? 我想做这样的事情: sqlProc.declareRowMapper((rs, rowNum) -> { a.doSomething(rs, rowNum); return new Object(); }); 但后来我会得到一个编译错误,说a cannot be resolved […]

使用lambda的内联过滤避免意外的null

我有我想要做的每个元素的列表(使用Java 8): disabledUsersOnLDAP.stream().forEach(user ->usersRepository.findEnabledByUsername(user.getUserName()).setEnabled(false)); usersRepository.findEnabledByUsername怎么可能返回null。 当然,我可以这样做: disabledUsersOnLDAP.stream().forEach(user -> { UserEntity userEntity = usersRepository.findEnabledByUsername(user.getUserName()); { if (userEntity != null) { userEntity.setEnabled(false); } } }); 但我想知道我是否可以进行内联空检查(在第一个选项中)?

如何使用Java 8流和filter过滤嵌套循环?

如何使用java8流和filter过滤嵌套循环? 假设我有一个汽车List ( List ),每辆汽车都有一个Engines List ( List ),每个引擎都有一个List 。 在常规Java中,这种结构可以描述为: for(Car car : cars) { for (Engine engine : car.getEngines()) { for (Part part : engine.getParts()) { // … } } } 假设我将汽车列表初始化为: List cars = new ArrayList(Arrays.asList(new Car(), new Car(), new Car())); cars.get(0).setEngines(null); cars.get(1).setEngines(new ArrayList()); cars.get(2).setEngines(new ArrayList() {{ add(new Engine()); add(null); add(new Engine()); […]

包含lambda表达式的代码是否会在较旧的JVM上运行,例如,对于java 1.6?

Lambda是在Java8中引入的。 包含lambda表达式的代码是否会在较旧的JVM上运行,例如,对于java 1.6? 我担心二进制兼容性而不是源代码兼容性。 这是一个简单的是/否问题。 谢谢。

我可以不映射/ flatMap一个OptionalInt吗?

为什么在OptionalInt或其他原始可选的flatMap()上似乎没有map() / flatMap()方法? stream()映射操作允许在对象和基元之间进行转换。 但为什么Optional不利用这个呢? OptionalInt profileId = OptionalInt.of(124); Optional profile = profileId.map(i -> getProfile(i)); //no such valid map() method!