Tag: lambda

用java 8 API替换两个嵌套的for循环

我有以下片段,我想知道是否以及如何用Streams / Java 8 API替换它 for (State state : states) { for (City city : cities) { if (state.containsPoint(city.getLocation())) { System.out.printf(“%30s is part of %-30s\n”, city.getName(), state.getName()); } } }

使用lambda表达式时,Java 8generics+exception编译时错误

几天前,我开始重构一些代码以使用新的Java 8 Streams库。 不幸的是,我在使用一个方法执行Stream :: map时遇到了编译时错误,该方法被声明为抛出一个进一步指定为RuntimeException的genericsE. 有趣的是,当我切换到使用方法引用时,编译时错误消失了。 这是一个错误,还是我的方法引用不等同于我的lambda表达式? (另外,我知道我可以用Parameter :: execute替换p-> p.execute(foo)。我的实际代码有execute方法的附加参数)。 错误信息 Error:(32, 43) java: unreported exception E; must be caught or declared to be thrown 码 import java.util.ArrayList; import java.util.List; public class JavaBugTest { interface AbleToThrowException { } interface Parameter { public Object execute(AbleToThrowException algo) throws E; } interface ThrowsRuntimeException extends AbleToThrowException { […]

有没有像“(k,v)”那样流式传输地图而不是使用(条目)?

基本上我寻找一种避免使用的方法 entry -> entry.getValue 和 entry -> entry.getKey 类似于Map.forEach()function。 如果只有我可以得到一种工作方式map.stream().filter((k,v) -> ) …等等 看起来这个界面叫做BiConsumer。 或许转换为BiConsumer转换器或Stream.generate()

Java 8:使用lambda表达式初始化HashMap

我正在尝试一次声明和定义更大的哈希映射。 我是这样做的: public HashMap<Integer, Callable> opcode_only = new HashMap<Integer, Callable>() {{ put(x, y); put(x, y); }}; 但是,当我尝试在put使用lambda表达式时,我正在进行eclipse warrning / error。 这就是我在HashMap中使用lambda的方法: public HashMap<Integer, Callable> opcode_only = new HashMap<Integer, Callable>() {{ put(0, () -> { return “nop”; }); put(1, () -> { return “nothing….”; }); }}; Eclipse以逗号开头强调lambda的整个部分。 错误消息: Syntax error on token “,”, Name expected Syntax […]

Java中的Streams无法想出这段代码

我找到了以下代码片段: Function<Integer, Predicate> smallerThan = x -> y -> y < x; List l = Arrays.asList(5, 6, 7, 23, 4, 5645, 6, 1223, 44453, 60182, 2836, 23993, 1); List list2 = l.stream() .filter(smallerThan.apply(l.get(0))) .collect(Collectors.toList()); System.out.println(list2); 作为输出我收到: [4, 1] 考虑到我们只传递一个参数smallerThan.apply(l.get(0)) ,这个例子中的smallerThan函数如何工作?

如何使用lambda流迭代嵌套列表?

我正在尝试使用`stream将以下代码重构为lambda表达式,尤其是嵌套的foreach循环: public static Result match (Response rsp) { Exception lastex = null; for (FirstNode firstNode : rsp.getFirstNodes()) { for (SndNode sndNode : firstNode.getSndNodes()) { try { if (sndNode.isValid()) return parse(sndNode); //return the first match, retry if fails with ParseException } catch (ParseException e) { lastex = e; } } } //throw the exception if all […]

在Java 8中使用Lambda对ArrayList进行排序

有人能告诉我一个快速的例子,说明如何使用新的lambda语法在Java 8中按字母顺序对ArrayList进行排序。

使用Stream API在每个对象上调用方法的“好”方法

是否可以在消费者中运行方法,如方法引用,但是在传递给使用者的对象上: Arrays.stream(log.getHandlers()).forEach(h -> h.close()); 会是这样的事情: Arrays.stream(log.getHandlers()).forEach(this::close); 但那不行…… 是否有可能使用方法引用,或者x -> x.method()是在这里工作的唯一方法吗?

将Java 8 Lambdas与generics一起使用

是否可以使用Predicate接口执行此操作。 我有一个客户端类,它使用MathUtility类提供的函数。 无论Mathmatical操作是什么,它都应该只在MathUtility类中发生。 //in client MathUtility.sum(listOfInts, (Integer i)->{return (i<3);}); //in utility class MathUtility { public static T sumWithCondition(List numbers, Predicate condition) { return numbers.parallelStream() .filter(condition) .map(i -> i) .reduce(0, T::sum); //compile time error } public static T avgWithCondition(List numbers, Predicate condition) { //another function } //lot many functions go here } 现在它失败并出现此错误 – The method […]

在Java 8中使用Lambda迭代地图吗?

我是java和lambda的新手,我想在地图的地图中找到值的总和和平均值。 我的对象就像Map<String, Map> browserData; 数据具有格式 <Chrome, > <Chrome, > <Chrome, > <IE, > <IE, > <IE, > <FF, > <FF, > <FF, > 最终结果需要是两张地图,1表示总和,另一张表示平均值 map1 = map2 = 所以上面例子的结果就是这样 map1 = map2 = 我怎样才能做到这一点?