在我看来,明显的代码,当使用Java 8时Stream,无论它们是"对象"流还是原始流(即IntStream和朋友)都只是使用:
someStreamableResource.stream().whatever()
Run Code Online (Sandbox Code Playgroud)
但是,相当多的"可流动资源"也有.parallelStream().
读取javadoc时不清楚的是.stream()流是否始终是顺序的,以及.parallelStream()流是否始终是并行的...
然后有Spliterator,特别是它.characteristics(),其中一个是它可以CONCURRENT,甚至IMMUTABLE.
我的直觉是,事实上,Stream默认情况下是否可以并行,或者根本不是并行,是由其潜在的Spliterator...
我是在正确的轨道上吗?我已经阅读并再次阅读了javadocs,但仍然无法对这个问题做出明确答案......
仅仅因为一个函数(或构造函数)......
...并不意味着编译器将在转换期间评估constexpr函数.我一直在查看C++ 11 FDIS(N3242,可从http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/获取)来尝试确定两件事:
第5.19节第1段说明在翻译过程中可以评估常量表达式.据我所知,第5.19节的其余部分阐述了constexpr函数定义中有效的规则.
我理解我可以通过将constexpr函数的结果声明为constexpr来强制转换期间的constexpr评估.像这样:
// Declaration
constexpr double eulers_num() { return 2.718281828459045235360287471; }
// Forced evaluation during translation
constexpr double twoEulers = eulers_num() * 2.0;
static_assert(twoEulers > 5.0, "Yipes!");
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直无法找到FDIS中的段落:
twoEulers在翻译过程中要评估的力量我对发现特别感兴趣的是翻译期间的constexpr评估是否由以下因素触发:
如果可能的话,请在您的回复中引用我可以查找的FDIS部分或我可以在FDIS中搜索的关键短语.标准中的英语有点迟钝,所以我可能已经阅读了相关的段落并完全忽略了它们的含义或意图.
我正在阅读Java 1.6 API提供的HashMap类的代码,无法完全理解以下操作的需要(在put和get方法的主体中找到):
int hash = hash(key.hashCode());
Run Code Online (Sandbox Code Playgroud)
方法hash()具有以下主体:
private static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
Run Code Online (Sandbox Code Playgroud)
这通过对提供的哈希码执行位操作来有效地重新计算哈希值.即使API声明如下,我也无法理解这样做的必要性:
这很关键,因为HashMap使用两个幂的长度哈希表,否则会遇到低位不同的hashCodes的冲突.
我确实理解键值是存储在数据结构数组中的,并且该数组中项的索引位置由其哈希确定.我无法理解的是这个函数如何为哈希分布添加任何值.
我自己学习WPF,似乎无法找到一种方法来完成这项工作.
这是我的代码:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="600" Width="800" >
<DockPanel>
<Menu DockPanel.Dock="Right"
Height="30"
VerticalAlignment="Top"
Background="#2E404B"
BorderThickness="2.6">
<Menu.BitmapEffect>
<DropShadowBitmapEffect Direction="270" ShadowDepth="3" Color="#2B3841"/>
</Menu.BitmapEffect>
</Menu>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
如何显示平铺的背景图像?
我试图找出在视图上给定点获取像素颜色值的最佳方法.我有三种方式写入视图:
我用View.setBackgroundDrawable(...)设置了一个背景图像.
我使用Canvas.drawText(...),Canvas.drawLine(...)等将文本,绘制线等写入支持Bitmap的Canvas.
我通过将子对象(sprite)写入传递给View的onDraw(Canvas画布)方法的Canvas来绘制子对象(精灵).
这是我的类中的onDraw()方法,它扩展了View:
@Override
public void onDraw(Canvas canvas) {
// 1. Redraw the background image.
super.onDraw(canvas);
// 2. Redraw any text, lines, etc.
canvas.drawBitmap(bitmap, 0, 0, null);
// 3. Redraw the sprites.
for (Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
获得像素的颜色值以考虑所有这些来源的最佳方法是什么?
考虑以下课程:
import java.util.Objects;
import java.util.function.Predicate;
public class LambdaVsMethodRef {
public static void main(String[] args) {
Predicate<Object> a = Objects::nonNull;
Predicate<Object> b = x -> x != null;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个谓词是从方法引用创建的,另一个是lambda表达式.这些谓词具有相同的行为(nonNull正文是正确的return obj != null;).lambda缩短了两个字符(可能允许流管道适合一行).
除了代码风格,和之间有什么区别?换句话说,我应该更喜欢一个吗?Objects::nonNullx -> x != null
拉姆达-dev的和λ-库-规格- {观察员,专家}邮件列表邮件提isNull,nonNull以及isNotNull(初名)并没有解决这个问题.(我很惊讶没有人质疑添加Objects方法,因为它们可以用lambda轻松替换,但另一方面,也是如此Integer::sum.)
我也查看了字节码javap.唯一的区别是传递给lambda metafactory bootstrap方法的方法句柄:
BootstrapMethods:
0: #16 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#17 (Ljava/lang/Object;)Z
#18 invokestatic java/util/Objects.nonNull:(Ljava/lang/Object;)Z
#17 (Ljava/lang/Object;)Z
1: #16 invokestatic …Run Code Online (Sandbox Code Playgroud) 我对现代Windows软件如何用C++编写非常感兴趣.我问过曾经从事Windows软件工作的朋友,他告诉他最后的工作是MFC,然后是WTL.他说MFC不再是现代的,但仍然使用WTL,但他不太了解.他还说WTL不是那么现代,在此之前他用纯Windows API编程.
如何为Windows Vista或Windows 7编写软件?你还在使用WTL吗?那么MFC和纯Windows API呢?或者现在有其他图书馆吗?
我不太了解它,但是在编写现代Windows软件时,C#还是其他.NET语言取代了C++?
在使用Eclipse一段时间之后,我现在使用NetBeans作为我的Java IDE.有没有办法导出Eclipse的语法高亮设置以便在NetBeans中使用,或者将NetBeans语法高亮显示配置为像Eclipse一样?
Thread.currentThread()是一个静态方法,它提供对当前正在执行的Thread的引用(基本上是对'this'线程的引用).
this在Java中无法访问静态方法中的非静态成员(特别是),因此currentThread()是本机方法.
currentThread()方法如何在幕后工作?
当我运行此代码时
List<int[]> list = Arrays.asList(new int[]{1, 2, 3}, new int[]{4, 5});
int[][] arr = list.stream().map(j -> j.clone()).toArray(int[][]::new);
System.out.println(Arrays.deepToString(arr));
Run Code Online (Sandbox Code Playgroud)
它按预期工作,我得到输出
[[1, 2, 3], [4, 5]]
Run Code Online (Sandbox Code Playgroud)
但是,如果我用方法引用替换lambda clone()
int[][] arr = list.stream().map(int[]::clone).toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)
我得到一个运行时异常:
Exception in thread "main" java.lang.NoClassDefFoundError: Array
at Main.lambda$MR$main$clone$8ed4b78b$1(Main.java:14)
at Main$$Lambda$1/1160460865.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:576)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:255)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
at Main.main(Main.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.ClassNotFoundException: Array
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method) …Run Code Online (Sandbox Code Playgroud)