小编Kon*_*ner的帖子

保存/写入/存储和读取/加载之间的语义差异?

我永远不知道在文件中写入/存储/保存内容的函数的正确名称是什么.什么时候我应该使用save()vs store()vs write(),这些之间的意义有什么不同?

我想store如果我写入数据库,write文本文件和save二进制数据,是否正确使用?那些XML文件呢?

load store save

12
推荐指数
3
解决办法
5485
查看次数

Java 8嵌套循环,包含流和性能

为了练习Java 8流,我尝试将以下嵌套循环转换为Java 8流API.它计算a ^ b(a,b <100)的最大数字总和,并在我的Core i5 760上占用~0.135s.

public static int digitSum(BigInteger x)
{
    int sum = 0;
    for(char c: x.toString().toCharArray()) {sum+=Integer.valueOf(c+"");}
    return sum;
}

@Test public void solve()
    {
        int max = 0;
        for(int i=1;i<100;i++)
            for(int j=1;j<100;j++)
                max = Math.max(max,digitSum(BigInteger.valueOf(i).pow(j)));
        System.out.println(max);
    }
Run Code Online (Sandbox Code Playgroud)

我的解决方案,我希望由于并行性而更快,实际上需要0.25秒(0.19秒没有parallel()):

int max =   IntStream.range(1,100).parallel()
            .map(i -> IntStream.range(1, 100)
            .map(j->digitSum(BigInteger.valueOf(i).pow(j)))
            .max().getAsInt()).max().getAsInt();
Run Code Online (Sandbox Code Playgroud)

我的问题

  • 我做了正确的转换,还是有更好的方法将嵌套循环转换为流计算?
  • 为什么流变种比旧变种慢得多?
  • 为什么parallel()语句实际上将时间从0.19s增加到0.25s?

我知道微基准测试很脆弱,并行性只对大问题是值得的,但对于CPU来说,甚至0.1秒都是永恒的,对吗?

更新

我使用Eclipse Kepler中的Junit 4框架进行测量(它显示了执行测试所花费的时间).

我的结果为a,b <1000而不是100:

  • 传统的循环186s
  • 顺序流193s
  • 并行流55s

更新2sum+=Integer.valueOf(c+"");sum+= c - '0';(谢谢彼得!) 替换平行方法10秒,使其达到45秒.没想到这么大的性能影响!

此外,减少与CPU内核数量的并行性(在我的情况下为4)没有做太多,因为它将时间减少到44.8s(是的,它增加了a和b …

java performance nested-loops java-8 java-stream

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

如何关闭Stanford CoreNLP Redwood日志记录?

如何关闭Stanford CoreNLP消息(见帖子末尾)?我首先尝试log4j.category.edu.stanford=OFF在log4j.properties中设置,但这没有帮助,所以我发现它显然使用了一个名为"Redwood"的非标准日志框架.根据http://nlp.stanford.edu/nlp/javadoc/javanlp/有文档但它受密码保护.我尝试过, RedwoodConfiguration.empty().apply();但这也无济于事.

记录消息:

Adding annotator tokenize
Adding annotator ssplit
Adding annotator pos
Loading default properties from tagger edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1,2 sec].
Run Code Online (Sandbox Code Playgroud)

PS:Redwood.hideAllChannels();也行不通.但是,以下内容会抑制我自己的日志记录语句(但不是来自StanfordCoreNLP的语句):

RedwoodConfiguration.empty().apply();
Redwood.log("test redwood");
Run Code Online (Sandbox Code Playgroud)

解决方案好的,StevenC是对的,毕竟它不是记录语句,但是默认初始化消息被写入stderr,我没想到会看到Stanford拥有它自己的日志框架然后不使用它:-)

无论如何,他的提示让我发现了这个解决方案:

// shut off the annoying intialization messages
RedwoodConfiguration.empty().captureStderr().apply();
nlp = new StanfordCoreNLP(myproperties);
// enable stderr again
RedwoodConfiguration.current().clear().apply();
Run Code Online (Sandbox Code Playgroud)

java logging stanford-nlp

10
推荐指数
1
解决办法
1459
查看次数

Java 8流中的arg max?

我经常需要根据产生double或int值的标准的最大化来收集集合的最大元素.Streams有max()函数,需要我实现一个比较器,我觉得很麻烦.是否有更简洁的语法,例如names.stream().argmax(String::length)在以下示例中?

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class ArgMax
{
    public static void main(String[] args)
    {
        List<String> names = Arrays.asList("John","Joe","Marilyn");
        String longestName = names.stream().max((String s,String t)->(Integer.compare(s.length(),t.length()))).get();
        System.out.println(longestName);
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8 argmax java-stream

9
推荐指数
2
解决办法
5796
查看次数

如何在IntelliJ IDEA中设置黑色背景?

我使用带有Darkula颜色方案的IntelliJ IDEA 2016.1.2,但对比度对我来说太低,所以我想将背景颜色设置为纯黑色(#000000).虽然可以选择将控制台和编辑器的背景设置为黑色,但这不适用于用户界面的其余部分.如何将整个主题(控制台,编辑器,菜单,对话框......)的背景颜色更改为黑色?

color-scheme intellij-idea

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

乘法比数组访问快吗?

令我惊讶的是,当通过预生成阵列中的结果与原始的8毫秒相比来"优化"乘法时,我得到更长的时间(10毫秒).这只是一个Java怪癖还是PC架构的一般?我有一个带有Java 7,Windows 8 64位的Core i5 760.

public class Test {
    public static void main(String[] args)  {
        long start = System.currentTimeMillis();
        long sum=0;
        int[] sqr = new int[1000];
        for(int a=1;a<1000;a++) {sqr[a]=a*a;}

        for(int b=1;b<1000;b++)
//          for(int a=1;a<1000;a++) {sum+=a*a+b*b;}
            for(int a=1;a<1000;a++) {sum+=sqr[a]+sqr[b];}
        System.out.println(System.currentTimeMillis()-start+"ms");
        System.out.println(sum);
    }
}
Run Code Online (Sandbox Code Playgroud)

java optimization

8
推荐指数
1
解决办法
1875
查看次数

在不同的机器上共享Eclipse Oomph首选项?

我在三台不同的计算机上使用Eclipse,并希望统一我的首选项,例如UTF-8编码和代码模板.之前已经问过这个问题,但那是在将Oomph集成到Eclipse之前.Oomph是否具有"Ooomph Cloud"等功能,我可以使用我的Google帐户登录并同步我的偏好设置?

eclipse cloud share oomph

8
推荐指数
2
解决办法
1180
查看次数

如何使用登录用户的 GitHub API 在 GitHub 上发布问题存根,而无需验证密钥?

我的 Web 应用程序的用户应该将错误报告作为 GitHub 问题提供,并带有预先生成的标题和正文。

这对于小型机构使用 GET 非常好:

const title = getLastErrorTitle();
const body = getAllTheLogMessages();
window.open(`https://github.com/theuser/therepo/issues/new?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`);
Run Code Online (Sandbox Code Playgroud)

如果用户已登录,GitHub 会向用户显示一个新问题,标题和正文已填写,完美。如果没有,GitHub 会提示用户登录,下次再运行。

但是,如果正文太大,则 GET 请求会因为 URL 变得太长而失败。

在查阅手册后,我尝试对 POST 做同样的事情,但我从 GitHub 获得了一个 404 并带有以下测试请求(为简洁起见是 jQuery):

 $.ajax({
  type: "POST",
  url: "https://api.github.com/repos/theuser/therepo/issues",
  data: data = {title: "Test", body: "Test Body"},
});
Run Code Online (Sandbox Code Playgroud)

我的怀疑是,GitHub API 的设计并没有考虑到我的用例,但是 POST 总是需要身份验证并一次性创建完整的问题,而不会让用户像使用 GET 那样事先更改它。

如何将 GET 方法的功能转移到 POST 方法?我只希望 GitHub 向当前登录浏览器的用户显示一个预填充的问题,而不需要令牌。

javascript api post github github-api

8
推荐指数
1
解决办法
154
查看次数

这是资源泄漏还是误报?

Eclipse给出了关于"out"声明的警告.这是误报吗?

Random r = new Random();
try(PrintWriter out1 = new PrintWriter("one.txt");
    PrintWriter out2 = new PrintWriter("two.txt"))
{
  PrintWriter out = r.nextBoolean()?out1:out2;
  out.println("x");
}
Run Code Online (Sandbox Code Playgroud)

PS:警告是" 资源泄漏:'out'永远不会关闭 ".

java

7
推荐指数
2
解决办法
598
查看次数

Google表格中的时区日期时间?

我想计算Google表格中不同时区的日期时间之间的时差.

如果我将两个字段格式化为"datetime"而将另一个字段格式化为"duration",我可以使用差异运算符成功计算同一时区内的差异.

示例: A1 = 1/10/2016 10:10:00,B2 = 13/11/2016 15:35:00C2 = =B2-B1.

但是,当我将时区添加到日期时间时,例如A1 = 1/10/2016 10:10:00 GMT+1:00:00,C2显示#VALUE.

我知道我可以自己计算时区差异并从持续时间中减去它,但有没有办法通过直接在datetime字段中指定时区来实现自动化?

timezone datetime google-sheets

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