Tag: lambda

java 8 Collector 不是一个function界面,谁可以告诉为什么?

以下代码: public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors::toList) } } intellij告诉我: Collector不是function接口 但是当我修改代码如下,一切都很好,我不知道为什么? public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors.toList) } }

Java中的“Lambdifying”scala函数

使用Java和Apache Spark(已经在Scala中重写),面对旧的API方法( org.apache.spark.rdd.JdbcRDD构造函数),它有AbstractFunction1作为它的参数: abstract class AbstractFunction1[@scala.specialized -T1, @scala.specialized +R]() extends scala.AnyRef with scala.Function1[T1, R] {} 因为AbstractFunction1是一个抽象类,所以我不能使用Java8 lambdas,所以我决定用scala.Function1 trait包装java.util.functions.Function是相同的但是没有实现andThen和compose方法。 结果,我创建了thes接口: import scala.Function1; @FunctionalInterface public interface Funct extends Function1, Serializable { @Override default Function1 compose(Function1 before) { return null; } @Override default Function1 andThen(Function1 g) { return null; } } IDE对此接口没有任何问题,但在编译时,get: [ERROR] Funct is not a functional […]

为什么Java lamdareflection性能会变差

我构建了一个简单的测试,用Java LambdaMetafactory测量类reflection的性能。 根据各种post,使用LambdaMetafactory的reflection与直接调用getter一样快。 这似乎是最初的,但过了一段时间性能下降。 其中一个测试节目(这似乎是大势所趋): 原来: GET – REFLECTION: Runtime=2.841seconds GET – DIRECT: Runtime=0.358seconds GET – LAMBDA: Runtime=0.362seconds SET – REFLECTION: Runtime=3.86seconds SET – DIRECT: Runtime=0.507seconds SET – LAMBDA: Runtime=0.455seconds 最后: GET – REFLECTION: Runtime=2.904seconds GET – DIRECT: Runtime=0.501seconds GET – LAMBDA: Runtime=5.299seconds SET – REFLECTION: Runtime=4.62seconds SET – DIRECT: Runtime=1.723seconds SET – LAMBDA: Runtime=5.149seconds […]

从java.util.function.Function获取方法名称

是否可以获取java.util.function.Function的方法名称。 我想每次都记录正在使用的方法的名称。 下面的示例打印Lambda对象,但我还没有找到一种简单的方法来获取方法名称: public class Example { public static void main(String[] args) { Example ex = new Example(); ex.callService(Integer::getInteger, “123”); } private Integer callService(Function sampleMethod, String input) { Integer output = sampleMethod.apply(input); System.out.println(“Calling method “+ sampleMethod); return output; } }

java 8 switch case默认为类类型的break

我一直在寻找java的切换类型,我在这里找到了一个解决方案: 在java中切换类型 但问题是,解决方案并不像是一个带有break的switch ,确定会发生这种情况,因为我循环使用了Consumer ,我想知道一种修改我当前代码的好方法或清理替代方法来处理我的类类型, 在句柄第一次匹配后中断并且默认是仅处理不匹配(这里是父类StripeObject )。 我的业务是处理来自webhooks的条带事件,我正在使用stripe-java ,所以我的代码现在是这样的: public void handleWebHookEvent(Event eventJson) throws CardException, APIException, AuthenticationException, InvalidRequestException, APIConnectionException { Stripe.apiKey = configuration.getString(AppConstants.STRIPE_API_KEY); // Verify the event by fetching it from Stripe Event event = Event.retrieve(eventJson.getId()); Logger.debug(AppUtils.concatStrings(“|-> Event Received: [“, event.getId(), “] Type: [“, event.getType(), “] Request ID: [“, event.getRequest(), “]”)); handleEventObject(event.getData().getObject()); } private void […]

Java 8 lambda表达式:按顺序对满足给定谓词的所有项进行分组。 分组应将谓词作为关键,将项目作为值

以下是示例输入数据和预期输出。 我想在输入列表上单次迭代执行此操作。 // input Predicate sizeP = f -> f.length() > 1_000_000; // size filter Predicate nameP = f -> f.getName().startsWith(“Plot”); // name filter List fileList; // output // files list which satisfy the filter criteria Map<Predicate,List> rulesToFiles = new HashMap(); // Example data // 1. PlotPresentation.pptx-> 2 MB size // 2. Gen.docx-> 500 KB […]

要映射的Java流

我遇到Map<Integer, List> personenPerLeeftijd ,编译器说方法Persoon :: getLeeftijd无法解析。 我真的不知道我还能做什么,抱歉荷兰语! 我还需要更多信息请问 public class TestPersoon2 { public static void main(String[] args) { final List personen = Personen.getPersonen(); Map map = personen.stream().collect(Collectors.toMap(p -> p.getNaam() + “-” + p.getLeeftijd(), p -> p)); for (String s : map.keySet()) { System.out.printf(“%-15s -> %s\n”, s, map.get(s)); } Map<Integer, List> personenPerLeeftijd = personen.stream().collect(Collectors.groupingBy(Persoon::getLeeftijd)); //THIS METHOD […]

用于引导lambda表达式的实用程序类或方法链接的方法引用?

通过Java 8中引入的function接口,您可以轻松地将不同的表达式链接到一个新表达式中,如下面的代码片段所示。 public class PredicateChaining { public static void main(String[] args) { // verbose, but standard JDK functionality only Predicate allUpperCase = StringUtils::isAllUpperCase; Predicate longerThan5 = s -> s.length() > 5; if (allUpperCase.and(longerThan5).test(“PREDICATE”)) { System.out.println(“‘PREDICATE’ is a uppercase text, longer than 5.”); } // compact, but with utility method (‘chain’ in this case) if (chain(StringUtils::isAllLowerCase).and(s […]

Eclipse JDT AST Parser不解析Java lambda Expression中的类型

我正在使用Eclipse JDT AST Parser(3.10.0)来解析各种源代码文件。 这就是我如何初学解析器: ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setBindingsRecovery(true); parser.setResolveBindings(true); parser.setStatementsRecovery(true); parser.setSource(source.toCharArray()); parser.setUnitName(filename); parser.setEnvironment(classPath.toArray(new String[classPath.size()]), sources, new String[]{“UTF-8”}, true); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); 类路径由maven依赖插件创建。 这对大多数表达式都很有效,但它似乎与lambda表达式有问题 Optional first = adr.stream().filter( a -> a.getId().longValue() == contactAddress.getAddressId().longValue() ).findFirst(); 评估比较的两侧,每种类型都解析为null 。 在没有周围的lambda表达式的情况下解析相同的代码会导致每边都很long 。 有没有办法解决lambda表达式中的bindngs?

当两个元素共同时,合并设置

这是比较集的后续 我有 Set<Set> NestedSet = new HashSet<Set>(); [[Node[0], Node[1], Node[2]], [Node[0], Node[2], Node[6]], [Node[3], Node[4], Node[5]] [Node[2], Node[6], Node[7]] ] 当有两个共同的元素时,我想合并集合。 例如,0,1,2和0,2,6有两个共同的元素,因此将它们合并为[0,1,2,6]。 [0,1,2,6]和[2,6,7]再次有2和6个共同点。 所以将它们合并并获得[0,1,2,6,7]。 最终输出应该是: [ [Node[0], Node[1], Node[2], Node[6], Node[7]], [Node[3], Node[4], Node[5]] ] 我试过这样的: for (Set s1 : NestedSet ) { Optional<Set> findFirst = result.stream().filter(p -> { HashSet temp = new HashSet(s1); temp.retainAll(p); […]