小编Jef*_*oom的帖子

Java 8`Stream`可以并行,你甚至不需要它吗?

在我看来,明显的代码,当使用Java 8时Stream,无论它们是"对象"流还是原始流(即IntStream和朋友)都只是使用:

someStreamableResource.stream().whatever()
Run Code Online (Sandbox Code Playgroud)

但是,相当多的"可流动资源"也有.parallelStream().

读取javadoc时不清楚的是.stream()流是否始终是顺序的,以及.parallelStream()流是否始终是并行的...

然后有Spliterator,特别是它.characteristics(),其中一个是它可以CONCURRENT,甚至IMMUTABLE.

我的直觉是,事实上,Stream默认情况下是否可以并行,或者根本不是并行,是由其潜在的Spliterator...

我是在正确的轨道上吗?我已经阅读并再次阅读了javadocs,但仍然无法对这个问题做出明确答案......

java java-8 java-stream

20
推荐指数
1
解决办法
1584
查看次数

在C++ 11标准中,它指定何时可以在翻译期间评估constexpr函数?

仅仅因为一个函数(或构造函数)......

  • 宣布constexpr和
  • 函数定义符合constexpr要求

...并不意味着编译器将在转换期间评估constexpr函数.我一直在查看C++ 11 FDIS(N3242,可从http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/获取)来尝试确定两件事:

  • 什么时候编译器有义务在翻译期间评估constexpr函数?
  • 编译器何时允许在翻译期间评估constexpr函数?

第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函数时指定其他情况.

我对发现特别感兴趣的是翻译期间的constexpr评估是否由以下因素触发:

  1. 当传递给constexpr函数的所有参数都是文字,或者
  2. 隐含对象参数重载方案(13.3.1节第3段)期间或者是constexpr或需要一个文字(例如用于阵列的尺寸),或
  3. 还有别的东西.

如果可能的话,请在您的回复中引用我可以查找的FDIS部分或我可以在FDIS中搜索的关键短语.标准中的英语有点迟钝,所以我可能已经阅读了相关的段落并完全忽略了它们的含义或意图.

c++ constexpr c++11

18
推荐指数
2
解决办法
676
查看次数

为什么HashMap会重新生成密钥对象提供的哈希码?

我正在阅读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的冲突.

我确实理解键值是存储在数据结构数组中的,并且该数组中项的索引位置由其哈希确定.我无法理解的是这个函数如何为哈希分布添加任何值.

java collections hash hashmap hashcode

17
推荐指数
1
解决办法
5719
查看次数

如何将.PNG图像设置为我的WPF表单的TILED背景图像?

我自己学习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)

如何显示平铺的背景图像?

c# wpf background image

16
推荐指数
2
解决办法
2万
查看次数

获取Android视图上包含支持Bitmap的Canvas的点的像素颜色值

我试图找出在视图上给定点获取像素颜色值的最佳方法.我有三种方式写入视图:

  1. 我用View.setBackgroundDrawable(...)设置了一个背景图像.

  2. 我使用Canvas.drawText(...),Canvas.drawLine(...)等将文本,绘制线等写入支持Bitmap的Canvas.

  3. 我通过将子对象(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)

获得像素的颜色值以考虑所有这些来源的最佳方法是什么?

graphics android view android-canvas

15
推荐指数
1
解决办法
2万
查看次数

Objects :: nonNull和x - > x!= null之间有什么区别吗?

考虑以下课程:

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)

java lambda java-8 method-reference

14
推荐指数
1
解决办法
8749
查看次数

如何用C++编写现代Windows软件?

我对现代Windows软件如何用C++编写非常感兴趣.我问过曾经从事Windows软件工作的朋友,他告诉他最后的工作是MFC,然后是WTL.他说MFC不再是现代的,但仍然使用WTL,但他不太了解.他还说WTL不是那么现代,在此之前他用纯Windows API编程.

如何为Windows Vista或Windows 7编写软件?你还在使用WTL吗?那么MFC和纯Windows API呢?或者现在有其他图书馆吗?

我不太了解它,但是在编写现代Windows软件时,C#还是其他.NET语言取代了C++?

c++ windows api wtl

13
推荐指数
4
解决办法
2848
查看次数

Netbeans上的Eclipse语法着色

在使用Eclipse一段时间之后,我现在使用NetBeans作为我的Java IDE.有没有办法导出Eclipse的语法高亮设置以便在NetBeans中使用,或者将NetBeans语法高亮显示配置为像Eclipse一样?

eclipse netbeans syntax-highlighting

13
推荐指数
2
解决办法
5476
查看次数

Thread.currentThread()如何工作?

Thread.currentThread()是一个静态方法,它提供对当前正在执行的Thread的引用(基本上是对'this'线程的引用).

this在Java中无法访问静态方法中的非静态成员(特别是),因此currentThread()是本机方法.

currentThread()方法如何在幕后工作?

java multithreading

13
推荐指数
1
解决办法
7900
查看次数

对数组clone()的方法引用会导致NoClassDefFoundError:Array

当我运行此代码时

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)

java java-8 method-reference

13
推荐指数
1
解决办法
436
查看次数