小编Wic*_*koo的帖子

Java 8 lambda Void参数

假设我在Java 8中有以下功能接口:

interface Action<T, U> {
   U execute(T t);
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我需要一个没有参数或返回类型的操作.所以我写这样的东西:

Action<Void, Void> a = () -> { System.out.println("Do nothing!"); };
Run Code Online (Sandbox Code Playgroud)

但是,它给了我编译错误,我需要把它写成

Action<Void, Void> a = (Void v) -> { System.out.println("Do nothing!"); return null;};
Run Code Online (Sandbox Code Playgroud)

这很难看.有没有办法摆脱Void类型参数?

java lambda void java-8

165
推荐指数
7
解决办法
14万
查看次数

在Java 8中使用Java 7 HashMap

我已经将Java应用程序更新为Java 8.应用程序严重依赖于HashMaps.当我运行基准时,我看到了不可预测的行为.对于某些输入,应用程序比以前运行得更快,但对于较大的输入,它会一直较慢.

我检查过探查器,最耗时的操作是HashMap.get.我怀疑这些更改是由Java 8中的HashMap修改引起的,但可能不是这样,因为我已经更改了其他一些部分.

有没有一种简单的方法可以将原始的Java 7 HashMap挂钩到我的Java 8应用程序中,这样我只需要更改hashmap实现,看看我是否仍然观察到性能的变化.

以下是一个尝试模拟我的应用程序正在执行的操作的最小程序.基本思想是我需要在应用程序中共享节点.在某个运行时点,如果某个节点已根据某些整数属性而不存在,则应该检索或创建该节点.以下仅使用两个整数,但在实际应用程序中我有一个,两个和三个整数键.

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Test1 {

static int max_k1 = 500;
static int max_k2 = 500;

static Map<Node, Node> map;
static Random random = new Random();

public static void main(String[] args) {
    for (int i = 0; i < 15; i++) {
        long start = System.nanoTime();
        run();
        long end = System.nanoTime();
        System.out.println((end - start) / 1000_000);
    }
}

private static void run() {
    map = new HashMap<>(); …
Run Code Online (Sandbox Code Playgroud)

java performance hashmap

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

用于组合正则表达式的Java API

我正在编写一个需要在运行时定义和编译模式的应用程序.使用Java PatternAPI,我需要传递一个字符串并获得一个模式.像这样的东西:

Pattern.compile("ab*|c*");
Run Code Online (Sandbox Code Playgroud)

问题是我的模式是模块化的,我想用替代的,kleene星等组成它们,例如:

Char a = new Char('a');
Char b = new Char('b');
Char c = new Char('c');
Regex r = new Regex(new Alt(new Seq(a, new KleeneStar(b)), new KleeneStar(c)));
Pattern.compile(r);
Run Code Online (Sandbox Code Playgroud)

我没有在JDK中找到一个API来允许我这样的事情.我假设模式的底层实现应该有这样的API.有没有人知道如何从标准Ja​​va中获取这样的API,或者是否有第三方库?

最后,我想我可以用一些递归访问者自己创建这样一个API来打印输出字符串,但如果它已经退出就会很好.

java regex

7
推荐指数
1
解决办法
495
查看次数

C#语法"基地"

我正在研究C#5.0的语法,并不太了解"base"的用法.在参考手册中,有一个"基本访问"的概念定义为:

base-access:
    base   .   identifier
    base   [   expression-list   ]
Run Code Online (Sandbox Code Playgroud)

base关键字在哪里,似乎这是唯一的情况.但是,我遇到了C#等输入

base.WithAdditionalDiagnostics<TNode>(node, diagnostics);
Run Code Online (Sandbox Code Playgroud)

有人能指出我这个陈述所指的语法规则吗?由于'base'似乎是一个普通的关键字,而不是上下文,我假设对于这种情况应该有一个特定的语法规则,并且base不能简单地是一个标识符.

c# grammar

7
推荐指数
1
解决办法
307
查看次数

在Java中处理具体类型时的替代方法

假设我有以下类层次结构:

public interface Result {
}
public class Failure implements Result {
    private String msg;
    public Failure(String msg) {
        this.msg = msg;
    }
    @Override public String toString() { return msg; }
}
public class Success implements Result {
    private int time, count;
    public Success(int time, int count) { this.time = time; this.count = count; }
    public int getTime() { return time; }
    public int getCount() { return count; }
    @Override public String toString() { return time + ", " + …
Run Code Online (Sandbox Code Playgroud)

java inheritance instanceof

6
推荐指数
1
解决办法
533
查看次数

Java中如何获取字符类型的类别名称?

返回Character.getType(int codePoint)一个整数,但我找不到从中获取 unicode 类别名称(例如“Lu”或“Cn”)的方法。Character.getCategoryTypeName(int codePoint)我想要的是一个返回表示类型的字符串的方法。

类别名称位于常量注释中,一种方法是为返回的类型编写一个 switch case,然后手动对类型名称进行编码,如下所示:

我原来的计划是这样的:

for (int i = 0; i <= 0x10FFFF; i++) {
    switch (Character.getType(i)) {

        // General category "Sc" in the Unicode specification.
        // public static final byte CURRENCY_SYMBOL = 26;
        case Character.CURRENCY_SYMBOL: 
            map.put(i, "Sc");
            break;

        ....
     }
}
Run Code Online (Sandbox Code Playgroud)

但这会非常乏味。是否有自动方法或库来完成任务?

java unicode character

6
推荐指数
1
解决办法
1886
查看次数

Java 8中流和闭包的成本

我正在重写一个涉及使用Java 8以1000万的顺序处理对象的应用程序,我注意到流可以使应用程序的速度降低25%.有趣的是,当我的集合也是空的时候会发生这种情况,因此它是流的常量初始化时间.要重现此问题,请考虑以下代码:

    long start = System.nanoTime();
    for (int i = 0; i < 10_000_000; i++) {
        Set<String> set = Collections.emptySet();
        set.stream().forEach(s -> System.out.println(s));
    }
    long end = System.nanoTime();
    System.out.println((end - start)/1000_000);

    start = System.nanoTime();
    for (int i = 0; i < 10_000_000; i++) {
        Set<String> set = Collections.emptySet();
        for (String s : set) {
            System.out.println(s);
        }
    }
    end = System.nanoTime();
    System.out.println((end - start)/1000_000);
Run Code Online (Sandbox Code Playgroud)

结果如下:224对5毫秒.

如果我forEach直接使用set,即set.forEach()结果将是:12 vs 5ms.

最后,如果我在外面创建一次封闭

Consumer<? super String> consumer = s -> System.out.println(s); …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

6
推荐指数
1
解决办法
2078
查看次数

JavaScrip数组中的空项与undefined之间的区别是什么?

考虑以下JavaScript代码(在节点REPL中):

> let a = new Array(10)
undefined
> a
[ <10 empty items> ]
> a.map(e => 1)
[ <10 empty items> ]
> let b = new Array(10).fill(undefined)
undefined
> b
[ undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  undefined ]
> b.map(e => 1)
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> 
Run Code Online (Sandbox Code Playgroud)

当我创建一个空数组时,我会得到"空项",它们的行为似乎与之不同undefined.有人能解释一下有什么区别吗?

javascript arrays undefined

6
推荐指数
2
解决办法
773
查看次数

成员访问中的问号在C#中意味着什么?

有人可以向我解释以下代码中成员访问中的问号是什么意思?

它是标准C#的一部分吗?尝试在Xamarin Studio中编译此文件时出现解析错误.

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
Run Code Online (Sandbox Code Playgroud)

AnalyzerFileReference.cs第195行

c# null operators

5
推荐指数
2
解决办法
2300
查看次数

这个Haskell代码的语法规则是什么?

我有Haskell的基本知识(请原谅我,如果我的问题对于Haskellers来说看起来微不足道),并且最近一直在研究Haskell的语法.在Haskell 2010报告中,只有一个地方使用关键字"type":

topdecl ::=  "type" simpletype "=" type
Run Code Online (Sandbox Code Playgroud)

可以看出,总有一个"="是必需的.在一个Haskell文件中,我看到了这段代码:

type Key m :: *
Run Code Online (Sandbox Code Playgroud)

取自TrieMap.hs第61行.

这不符合规则.我怀疑这是一个GHC扩展或类似的东西.有人能指出这段代码符合哪种语法规则吗?顺便说一句,我没有找到扩展的语法规则,不得不猜测其中的许多,是否在某处记录?

syntax haskell

5
推荐指数
1
解决办法
128
查看次数