相关疑难解决方法(0)

在Java中组合多个列表

如果我想在Java中将两个列表合并为一个,我可以使用ListUtils.union(List list1,List list2).但是,如果我想组合多个列表呢?

这有效:

import org.apache.commons.collections.ListUtils;
List<Integer>list1=Arrays.asList(1,2,3);
List<Integer>list2=Arrays.asList(4,5,6);
List<Integer>list3=Arrays.asList(7,8,9);
List<Integer>list4=Arrays.asList(10,0,-1);
System.out.println(ListUtils.union(ListUtils.union(list1, list2),ListUtils.union(list3, list4)));
Run Code Online (Sandbox Code Playgroud)

但它看起来并不是最好的解决方案,阅读也不是特别好.可悲的ListUtils.union(list1,list2,list3,list4)是不行.使用addAll多次并为所有条目的副本创建自己的列表对我来说似乎并不理想.那么我该怎么做呢?

java list

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

为什么两个看似相同的hashmaps在gson序列化时会有不同的行为?

输入:

public static void main(String[] args) {

    final String key = "some key";
    final String value = "some value";

    Map<String, String> map1 = new HashMap<String, String>(){{put(key, value);}};
    System.out.println(new Gson().toJson(map1) + " " + map1.get(key));

    Map<String, String> map2 = new HashMap<>();
    map2.put(key, value);
    System.out.println(new Gson().toJson(map2) + " " + map2.get(key));
}
Run Code Online (Sandbox Code Playgroud)

输出:

null some value
{"some key":"some value"} some value

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

java hashmap gson

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

双支撑初始化器和阵列

我有一个方法有一个数组参数,如:

public static void foo(int[] param) {
    // Some code
}
Run Code Online (Sandbox Code Playgroud)

而且我也可以通过写作来调用方法

foo(new int[3]);
Run Code Online (Sandbox Code Playgroud)

通常,我们通过new运算符或双括号初始化器(如{1,2,3})声明和初始化数组.例如,int[] foo = new int[3]; int[] foo = {1, 2, 3};.

但是使用双括号初始化器作为方法的参数是不可能的.{}仅适用于创建数组对象.

这是我的问题:新运营商和{}?之间有什么区别吗?如果有,那是什么?

java arrays parameters constructor initializer

10
推荐指数
2
解决办法
766
查看次数

匿名类Java中的匿名代码块

可能重复:
Java中的Double Brace初始化是什么?

在查看一些遗留代码时,我遇到了一些令人困惑的事情:

 public class A{
      public A(){ 
          //constructor
      }
      public void foo(){
            //implementation ommitted
      }
 }

 public class B{
      public void bar(){
           A a = new A(){ 
                { foo(); }
           }
      }
 }
Run Code Online (Sandbox Code Playgroud)

在调试模式下运行代码后,我发现在{ foo() }调用构造函数后调用匿名块A().上述功能与以下功能有何不同:

 public void bar(){
       A a = new A();
       a.foo();
 }
Run Code Online (Sandbox Code Playgroud)

?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.

java anonymous-class

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

使用嵌套集合进行双括号初始化

我知道我可以List使用双括号声明和初始化:

// (1)
List<Object> myList = new ArrayList<object>(){{
    add("Object1");
    add("Object2");
}};
Run Code Online (Sandbox Code Playgroud)

但我想List<Map<Object,Object>>:

// (2)
List<Map<Object,Object>> myList = new ArrayList<Map<Object,Object>>();
Run Code Online (Sandbox Code Playgroud)

如何使用嵌套集合的双括号初始化(参见(1))?我的目标是在一行中声明和初始化数据结构.

另外我想知道使用双支撑初始化时是否存在某些缺点我必须注意.

java double-brace-initialize

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

Java中的块语句

我有一个扩展java.util.HashMap的MyMap类,下面的代码作为一个语句块,但我不明白使用额外的花括号

MyMap m = new MyMap() {
  {
      put("some key", "some value");
  }
};
Run Code Online (Sandbox Code Playgroud)

现在为什么我需要额外的花括号,我不能这样做(但这会引发编译错误)

MyMap m = new MyMap() {
    put("some key", "some value");
};
Run Code Online (Sandbox Code Playgroud)

java block

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

Java中Bracket的支架

在初始化例如新列表时,实际上意味着在括号中使用括号?

new ArrayList<String>() 
{
    {
       add("A");
    }
};
Run Code Online (Sandbox Code Playgroud)

这是否意味着创建新的引用方法后是否正在调用?

java

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

什么更有效?一个If Else还是一个HashMap?

我正在用Java编写一些代码来检查坐标是哪个象限,我想知道检查这个方法的效率更高:if-else块或使用HashMap.

HashMap看起来像这样:

private static final Map<Coordinate,Quadrant> quadMap = new HashMap<Coordinate, Quadrant>(){{
    put(new Coordinate(0,0), Quadrant.Q1);
    put(new Coordinate(0, 1), Quadrant.Q2);
    put(new Coordinate(1, 0), Quadrant.Q3);
    put(new Coordinate(1, 1), Quadrant.Q4);
}};
Run Code Online (Sandbox Code Playgroud)

然后我想要获得我的象限:

return quadMap.get(coordinate)
Run Code Online (Sandbox Code Playgroud)

if-else实现:

if (x < 1){
        if (y < 1){
            return Quadrant.Q1;
        } else {
            return Quadrant.Q2;
        }
    } else {
        if (y < 1){
            return Quadrant.Q3;
        } else {
            return Quadrant.Q4;
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者还有另一种更有效的方法吗?

java if-statement hashmap

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

如何将String数组放入String数组的数组中?

我有4个这样的字符串数组:

String[] array1  = new String{"there",  "there2", "there3", "there4"};
String[] array2  = new String{"here","here2","here3"};
String[] array3  = new String{"hi","hi2"};
String[] array4  = new String{"blah","blah2","blah3"};
Run Code Online (Sandbox Code Playgroud)

我想将这些放入一个数组数组,看起来像这样:

   Array myArray =  [{"there",  "there2", "there3", "there4"},
                     {"here","here2","here3"},{"hi","hi2"},
                     {"blah","blah2","blah3"}];
Run Code Online (Sandbox Code Playgroud)

然后就可以像这样访问它中的元素:

myArray[0][1] would equal "there2"
myArray[1][2] would equal "here3"
Run Code Online (Sandbox Code Playgroud)

希望有道理,我怎么能这样做呢?

我试过像这样制作一个ArrayList然后添加它们但它似乎不起作用

ArrayList<String[]> myArrayList = new ArrayList<String[]>();
myArrayList.add(myArray);
Run Code Online (Sandbox Code Playgroud)

java arrays

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

对象方法调用是否可以与对象实例同时完成?

我正在尝试使用java类BitSet作为自定义类的字段.我希望该类使用默认的BitSet并设置所有位.

import java.util.BitSet;

public class MyClass {
    private BitSet mask;

    public MyClass() {
        this(new BitSet(4));
        // want to set all bits first
        // something like 
        // this( new BitSet(4).set(0,3) );
    }

    public MyClass(BitSet mask) {
        this.mask = mask;
    }    
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,BitSet构造函数取消设置所有位.所以在我将它作为匿名对象发送之前,我想调用set(int, int)方法来设置所有位.我知道我可以简单地将字段初始化mask为new BitSet,然后set(int, int)从那里调用方法.

但是,一般来说我想知道在对象实例化时是否可以访问实例方法?

java instantiation this

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