我对"引用特定类型的任意对象的实例方法"背后的概念感到困惑.Oracle 文档有一个关于此的示例:
String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
我在这种方法参考中看到的大多数例子都是这样的:如果lambda是这样的:x -> x.func()那么你就可以这样写ClassOfX::func.文档中的示例说:
方法引用String :: compareToIgnoreCase的等效lambda表达式将具有形式参数列表(String a,String b),其中a和b是用于更好地描述此示例的任意名称.方法引用将调用方法a.compareToIgnoreCase(b).
现在的问题是:像任何两个参数的lambda (a, b) -> a.func(b)的func方法必须是第一个参数,拉姆达的第二个参数的实例方法将作为参数传递给该方法通过?如果我们有多个参数lambda那么func方法必须是lambda 的第一个参数的实例方法,而lambda的其他参数将按照lambda func中出现的顺序传递给它?我的意思是,而不是(a, b, c) -> a.func(b, c)我们可以写ClassOfA::func
对不起我的英语.我希望我能清楚地解决这个问题.
CompletableFuture.supplyAsync(
() -> {
transporter.write(req);
//here take the value from a blocking queue,will throw a interruptedException
return responseQueue.take();
}, executorService);
Run Code Online (Sandbox Code Playgroud)
处理interruptedException的常用方法是再次中断或直接抛出interruptedException,但两者都无法工作.有人有想法吗?
如何在java8中用lambda编写新的ListChangeListener()?
listItems.addListener(new ListChangeListener<Item>() {
@Override
public void onChanged(
javafx.collections.ListChangeListener.Change<? extends Item> c) {
// TODO Auto-generated method stub
}
});
Run Code Online (Sandbox Code Playgroud)
这是我试过的:
listItems.addListener(c->{});
Run Code Online (Sandbox Code Playgroud)
但是eclipse说:
对于ObservableList类型,方法addListener(ListChangeListener)是不明确的.
列表声明为:
ObservableList<Item> listItems = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud) 我有两个List<Map<String, Object>>对象.
[{Month=August-2013, Sales=282200}, {Month=July-2013, Sales=310400},
{Month=June-2013, Sales=309600}, {Month=May-2013, Sales=318200},
{Month=September-2013, Sales=257800}]
Run Code Online (Sandbox Code Playgroud)
和
[{Month=April-2013, NoOfTranx=8600}, {Month=August-2013, NoOfTranx=6700},
{Month=July-2013, NoOfTranx=14400}, {Month=June-2013, NoOfTranx=8500},
{Month=May-2013, NoOfTranx=14400}]
Run Code Online (Sandbox Code Playgroud)
我想把join(Merge)这两个List放在Month键上.如何FULL OUTER JOIN, RIGHT OUTER JOIN使用新的Collection在这些List上执行多个连接操作(即等)API.
浏览Brian Goetz 这个非常有趣但却有一年历史的演示文稿 - 在幻灯片链接中他提出了一个aggregateBy()假设在Stream API中的方法,该方法应该将列表(?)的元素聚合到一个映射(给定一个默认的初始值)以及操作该值的方法(对于重复键也是如此) - 请参阅演示文稿中的下一张幻灯片).
显然,Stream API中没有这样的方法.还有另一种方法可以在Java 8中做类似的事情吗?
我正在阅读Java-8中引入的新添加的现有功能.新增加到String类的一个简单特性是对我来说很安静 - 这就是String Join方法.
例:
String.join(" ", "AZY","BAX"); // returns AZY BAX
Run Code Online (Sandbox Code Playgroud)
为了好奇,我通过编写一个简单的java代码来检查这个功能的性能(执行时间)
public static void main(String[] args) {
long start = System.nanoTime();
String abc= String.join(" ,"AZY","BAX" … // joining 1000 words of size 3 char;
long diff = System.nanoTime() - start;
System.out.println(" Java 8 String Join " + diff);
start = System.nanoTime();
abc= "AZY"+"BAX"+"CBA"+ … // adding 1000 word of size 3 char;
diff = System.nanoTime() - start;
System.out.println(" Tranditional " + diff);
start = System.nanoTime();
new …Run Code Online (Sandbox Code Playgroud) 您好我在使用flatmap时有关于并行性的问题请考虑以下示例
IntStream.of(-1, 1).parallel().flatMap(i->IntStream.range(0,1000).parallel()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
我是否将内部标志设置为并行是否重要?如果我离开或不离开,结果看起来非常相似.为什么代码(ReferencePipeline)会对映射进行顺序化?我对这条线感到困惑:
result.sequential().forEach(downstream);
Run Code Online (Sandbox Code Playgroud)
我正在上课java.util.LinkedList,并且完全出乎意料ClassFormatError.我的IDE没有显示任何警告.仅供参考,我使用的是Java 8u20.更新:在Java 8u60中修复.
这包括所有的相关方法:̶更新例如作为完全编译:
import java.io.Serializable;
import java.util.*;
import java.util.function.Function;
public class Foo<E> implements Deque<E>, Serializable {
private static final long serialVersionUID = 0L;
private final Node sentinel = sentinelInit();
private final Iterable<Node> nodes = (Iterable<Node> & Serializable) () -> new Iterator<Node>() {
@SuppressWarnings("UnusedDeclaration")
private static final long serialVersionUID = 0L;
private Node next = sentinel.next;
@Override
public boolean hasNext() {
return next != sentinel;
}
@Override
public Node next() {
if (!hasNext()) {
throw …Run Code Online (Sandbox Code Playgroud) 最近我更改了JDK 8的版本而不是我的项目中的7个,现在我使用Java 8附带的新功能覆盖了一些代码片段.
final Matcher mtr = Pattern.compile(regex).matcher(input);
HashSet<String> set = new HashSet<String>() {{
while (mtr.find()) add(mtr.group().toLowerCase());
}};
Run Code Online (Sandbox Code Playgroud)
我如何使用Stream API编写此代码?
我有这种情况,似乎Java 8 Streams API会有所帮助,但我不完全确定它是怎么回事.
从两个集合具有鲜明的元素类型,我想建立第三集合的元素是所有可能的双从两个集合的元素.基本上:
两种截然不同的元素类型......
public class A {}
public class B {}
Run Code Online (Sandbox Code Playgroud)
As和Bs的"配对".
public class Pair {
private A a;
private B b;
public Pair(A a, B b){
this a = a;
this b = b;
}
}
Run Code Online (Sandbox Code Playgroud)
使用旧式API 制作的" 组合 " java.util.Collection:
public Collection<Pair> combine(Collection<A> as, Collection<B> bs){
Collection<Pair> pairs = new ArrayList();
foreach(A a: as){
foreach(B b: bs){
Pair pair = new Pair(a,b);
pairs.add(pair);
}
}
return pairs;
}
Run Code Online (Sandbox Code Playgroud)
结果对集合中的排序并不重要.因此,可以创建Pair的每个实例并将其并行添加到结果集合中.我怎么能实现这个目标?
我能想到的最好的就是使用Streams版本foreach: …
java ×10
java-8 ×10
lambda ×4
java-stream ×3
collections ×2
aggregation ×1
exception ×1
join ×1
listener ×1
regex ×1