Tag: lambda

Java Lambda表达式

我目前正在JDK 1.8上学习lambda表达式。 我遇到了一些我发现我不明白的代码。 这是代码: import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.lang.Comparable; /** * Hello world! * */ public class App { public static void main( String[] args ) throws Exception { List list = Arrays.asList(“a”, “b”, “c”); sort(list, Comparable::compareTo); } interface MyComparable { public <T extends Comparable> int compare(T obj1, T obj2 ); } […]

字符串的字符串IntStream – Java

是否可以将字符串str.chars()的流转换为使用字符串流,其中每个字符串包含5个字符,例如?

Java Streams – 如何在每第n个项目中执行中间函数

我正在寻找一个Stream上的操作,使我能够每隔n项执行一次非终端(和/或终端)操作。 虽然我使用素数流,例如,流可以很容易地生成网络请求,用户操作或其他一些冷数据或实时源。 由此: Duration start = Duration.ofNanos(System.nanoTime()); IntStream.iterate(2, n -> n + 1) .filter(Findprimes::isPrime) .limit(1_000_1000 * 10) .forEach(System.out::println); System.out.println(“Duration: ” + Duration.ofNanos(System.nanoTime()).minus(start)); 对于像这样的流函数: IntStream.iterate(2, n -> n + 1) .filter(Findprimes::isPrime) .limit(1_000_1000 * 10) .peekEvery(10, System.out::println) .forEach( it -> {});

Java 8 foreach函数中有超过1个命令

是否可以在Java 8中引入的Map.foreach函数中使用多个命令? 所以与其: map.forEach((k, v) -> System.out.println(k + “=” + v)); 我想做的事情如下: map.forEach((k, v) -> System.out.println(k)), v.forEach(t->System.out.print(t.getDescription())); 让我们假设k是字符串而v是集合。

Lambda表达式在Eclipse Luna中导致警告

我有一个非常类似的问题,如这个未解答的问题所述: 嵌套的lambda表达式会在Eclipse Luna中产生警告 我正在使用Eclipse Luna(Service Release 1,4.4.1)与Windows 7和Java 8(jdk 1.8.0_05)。 以下( 编辑 )代码: Collections.sort(new LinkedList(), (c1, c2) -> { return c1.equals(c2)? 1 : 0; }); 产生警告: (Recovered) Internal inconsistency detected during lambda shape analysis 警告分配给代码的这一部分:“(c1,c2) – >”。 注意 :有趣的是,省略return语句的较短版本编译正常,没有任何警告: Collections.sort(new LinkedList(), (c1, c2) -> c1.equals(c2)? 1 : 0); 对于明确给出c1和c2类型的代码也是如此 Collections.sort(new LinkedList(), (Object c1, Object c2) […]

列表包含来自另一个列表的至少一个值(Java 8)

我的函数从列表中的给定单词列表中查找一个单词在页面中是否有效。 因此,当页面包含单词时,我将其编写如下:(简化版) private boolean atLeastOneWordIsValidInThePage(Page page, Set wordIdsToCheck) Set wordIds = page.getWords().stream() .filter(word -> word.isValid()) .map(word->getWordId()) .collect(Collectors.toSet()); return words.stream().anyMatch((o) -> wordIds.contains(o)); 写它是最好的java 8练习吗? 我想在找到第一场比赛时停止搜索。

用于传递和调用方法引用的Lambda语法

传递和调用方法引用的Lambda语法是什么? 场景:根据枚举中的值构建对象(单选按钮)。 我传递了枚举值的集合。 我希望另一个方法(构造函数)在每个枚举值上调用一个方法。 该方法调用确定每个单选按钮的显示标签。 但是该方法的名称因每个特定的Enum类而异。 一些枚举有一个getTitle方法,另一个可能有一个名为getDescription或getCaption的方法,而另一个可能有getLocalizedVariationOfTitle 。 如何让每个调用程序员传递他们的特定方法来调用? Collection enumValues = Arrays.asList( SomeEnum.values() ); x = new EnumRadioButtons( enumValues , ??methodReferenceToGetTitle?? ); 传递和调用语法??methodReferenceToGetTitle?? 我不知道。 构造函数看起来像这样: public EnumRadioButtons ( Collection options , ??methodReferenceToGetTitle?? ) { … for ( Object option : options ) { this.setTitleOfEachOption( option , ??methodReferenceToGetTitle?? ); } } 取消引用方法引用时,代码有效地变为: this.setTitleOfEachOption( option , […]

使用流有条件地填充地图 – Java 8

我正在尝试将此(简化)代码翻译为使用Java-8流: Map files = new ConcurrentHashMap(); while(((line = reader.readLine()) != null) { if(content != null) files.put(“not null”+line, “not null”+line); else files.put(“its null”+line, “its null”+line); } reader.close(); 这是我尝试过的: files = reader.lines().parallel().collect((content != null)? (Collectors.toConcurrentMap(line->”notnull”+line, line->line+”notnull”)) : (Collectors.toConcurrentMap(line->line+”null”, line->line+”null”))); 但是上面给出了关于intelliJ上所有line->line+”…”的“循环推理”消息。 什么是循环推理? 这个逻辑中有错误吗? 我在SO上注意到了一些类似的问题。 但是他们建议使用interface(Map)而不是它的实现。 但是这里的files被声明为Map 。 更新:添加更多上下文, content是一个包含目录名称的String。 files是一个包含多个文件路径的映射。 需要进入files映射的文件路径取决于content目录名是否已填充。

在这种情况下,如何处理Function 和省略号/ varargs?

我的一个项目是扔lambda ; 在其中我的目标是简化Stream中潜在的@FunctionalInterface的使用,它在Stream使用的唯一“缺陷”是它们抛出已检查的exception(就我而言,我宁愿称有缺陷的事实是你不能从流中抛出已检查的exception但这是另一个故事)。 所以,对于Function我定义了这个: @FunctionalInterface public interface ThrowingFunction extends Function { R doApply(T t) throws Throwable; default R apply(T t) { try { return doApply(t); } catch (Error | RuntimeException e) { throw e; } catch (Throwable throwable) { throw new ThrownByLambdaException(throwable); } } } 这允许我定义,例如: final ThrowingFunction = Path::toRealPath; (为什么Path::toRealPath ……好吧, 正是因为它有一个省略号 )。 不想停在这里我希望能够写下这样的东西: […]

Spark Combinebykey JAVA lambda表达式

我想使用lambda函数来计算( JavaPairRDD pairs )的密钥的平均值。 出于这个原因,我开发了以下代码: java.util.function.Function<Double, Tuple2> createAcc = x -> new Tuple2(x, 1); BiFunction<Tuple2, Double, Tuple2> addAndCount = (Tuple2 x, Double y) -> { return new Tuple2(x._1()+y, x._2()+1 ); }; BiFunction<Tuple2, Tuple2, Tuple2> combine = (Tuple2 x, Tuple2 y) -> { return new Tuple2(x._1()+y._1(), x._2()+y._2() ); }; JavaPairRDD<Integer, Tuple2> avgCounts = pairs.combineByKey(createAcc, addAndCount, combine); […]