小编Oli*_*ire的帖子

为什么数组[idx ++] + ="a"在Java 8中增加一次idx,在Java 9和10中增加两次?

对于挑战,一位代码高尔夫球手 编写了以下代码:

import java.util.*;
public class Main {
  public static void main(String[] args) {
    int size = 3;
    String[] array = new String[size];
    Arrays.fill(array, "");
    for(int i = 0; i <= 100; ) {
      array[i++%size] += i + " ";
    }
    for(String element: array) {
      System.out.println(element);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Java 8中运行此代码时,我们得到以下结果:

1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 …
Run Code Online (Sandbox Code Playgroud)

java javac java-8 java-9 java-10

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

在python中的字典的深拷贝

我想dict在python中制作一个深层副本.不幸的是,该.deepcopy()方法不存在dict.我怎么做?

>>> my_dict = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> my_copy = my_dict.deepcopy()
Traceback (most recent calll last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'deepcopy'
>>> my_copy = my_dict.copy()
>>> my_dict['a'][2] = 7
>>> my_copy['a'][2]
7
Run Code Online (Sandbox Code Playgroud)

最后一行应该是3.

我希望这些修改my_dict不会影响快照my_copy.

我怎么做?该解决方案应与Python 3.x兼容.

python python-3.x

290
推荐指数
3
解决办法
19万
查看次数

是否应在stdout或stderr上打印命令行"usage"?

打印应用程序的"用法"时,是应该在stdout还是stderr上完成?

根据应用程序,我看过几个案例,但似乎没有一个规则.也许我错了,有一个很好的做法.在那种情况下,它是什么?

command-line stdout stderr usage-message

40
推荐指数
2
解决办法
4359
查看次数

Python中的常量:在模块的根目录或模块内的命名空间中?

我正在构建一个包含大约一百个常量的Python模块.

当人们导入我的模块时,我想避免命名问题,所以我想知道最好的方法是什么.

MY_CONSTANT = 1
MY_SECOND_CONSTANT = 2
...
MY2_CONSTANT = "a"
MY2_SECOND_CONSTANT = "b"
...
Run Code Online (Sandbox Code Playgroud)

要么

class My:
  CONSTANT = 1
  SECOND_CONSTANT = 2
  ...

class My2
  CONSTANT = "a"
  SECOND_CONSTANT = "b"
  ...
Run Code Online (Sandbox Code Playgroud)

或许你的另一个建议?

来自Java,我当然更喜欢第二种方式,但有些人可能会觉得它有点过分......

python

35
推荐指数
4
解决办法
4万
查看次数

使Multimap仅在Java中按键排序

我想有一个c.g.c.c.Multimap仅基于键排序的.不应对值进行排序.我试图用番石榴来构建一些东西TreeMultimap,但我不能使用它,因为值类型没有实现Comparable.

public class MyObject /* doesn't implement Comparable */ {
  private String name;
  private int score;
  // Getters/setters are implemented
  public static Function<MyObject,Integer> myObjectToScore {
    @Override public Integer apply (MyObject o) { return o.score; }
  }
  public static Multimap<Integer,MyObject> indexOnScore(Iterable<MyObject> i) {
    Multimap<Integer,MyObject> m = Multimaps.index(i, myObjectToScore());
    // Do the sort of the keys.
    return m;
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经考虑过获取一些SortedSet密钥,然后迭代排序集中的每个密钥以获取各种值,但我希望在Guava中使用现有的(但尚未发现的)功能而不是使用这种黑客.

注意:我不会制作MyObject工具,Comparable因为它对我的实际对象毫无意义.


输入/输出示例:

Set<MyObject> s = Sets.newHashSet(
  new …
Run Code Online (Sandbox Code Playgroud)

java sorting multimap guava

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

Java .class文件的最大大小是多少?

.class文件是一个相当有据可查的格式定义部分和大小,因此,最大尺寸为好.

例如,一个.class文件包含一个幻数(4个字节),一个版本(4个字节),一个常量池(可变大小)等.但是可以在几个级别定义大小:你可以有65535个方法,每个方法仅限于65535个字节.

其他限制是什么?并且,如果你想使最大的.class文件成为可能,它的大小是多少?

如果需要,限制Java的答案.这意味着如果Scala或Clojure(或......)改变了某些限制,则忽略这些值.

java jvm specifications .class-file

24
推荐指数
2
解决办法
7800
查看次数

在使用数据库时,为什么要使用Java 8 Stream API而不是直接的hibernate/sql查询

最近我在很少的项目中看到很多代码使用流来过滤对象,比如:

library.stream()
          .map(book -> book.getAuthor())
          .filter(author -> author.getAge() >= 50)
          .map(Author::getSurname)
          .map(String::toUpperCase)
          .distinct()
          .limit(15)
          .collect(toList()));
Run Code Online (Sandbox Code Playgroud)

使用它而不是直接HQL/SQL查询到数据库返回已经过滤的结果是否有任何好处.

第二种方法不是更快吗?

java hibernate java-8 java-stream

20
推荐指数
5
解决办法
6146
查看次数

Guava可选用于例外的快捷方式?

在不存在Optional的情况下,我一直在写特定的例外投掷者.

例如:

Optional<?> optional = ...;
if (!optional.isPresent()) {
  throw new MyException();
}
Object result = optional.get();
Run Code Online (Sandbox Code Playgroud)

我发现这段代码不是很流畅,特别是使用了爆炸(!).我更喜欢写一些类似的东西:

Optional<?> optional = ...;
Object result = optional.orThrow(MyException.class);
Run Code Online (Sandbox Code Playgroud)

我还没有找到番石榴这样的捷径吗?

java guava

17
推荐指数
3
解决办法
5717
查看次数

在CentOS 6上切换java版本

我有一个带有Java 1.7的CentOS 6虚拟机.

$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-x86_64 u51-b02)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
$ javac -version
javac 1.7.0_51
Run Code Online (Sandbox Code Playgroud)

我需要使用Java 1.6而不是Java 1.7,所以我安装了它.

$ sudo yum install java-1.6.0-openjdk.x86_64
$ sudo yum install java-1.6.0-openjdk-devel.x86_64
Run Code Online (Sandbox Code Playgroud)

当我再次检查版本时,我会像以前一样.对于其他项目,我将需要Java 1.7,所以我想保留它.

现在我想配置我的虚拟机,以便默认的JDK 默认的JRE都是1.6.我怎么做?另外,当我完成它后,如何切换回Java 1.7?

centos jdk1.6 java-7 centos6

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

在Eclipse下用Maven运行JUnit测试

我刚刚在Eclipse上安装了插件m2e.

我写了一个简单的JUnit(版本4)测试.我可以从Eclipse运行它,但不能从pom.xml运行它(alt-click,Run as,Maven Test).我想我需要告诉Maven搜索那个课程,但我不知道怎么做.

另外,我在groupId"junit"中找不到JUnit 4:只有版本3.8.1可用.我真的需要为版本3.x而不是版本4+编写测试吗?

如何解决这个问题?

把我想象成Maven的新手:这就是我的本意.因此,除非准确描述我需要做什么,否则请不要谈论工件技术.我几乎无法安装Guava作为依赖,现在我完全失去了这些概念.

谢谢!

java eclipse junit maven-2

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