如果我想在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多次并为所有条目的副本创建自己的列表对我来说似乎并不理想.那么我该怎么做呢?
输入:
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) 我有一个方法有一个数组参数,如:
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};.
但是使用双括号初始化器作为方法的参数是不可能的.{}仅适用于创建数组对象.
这是我的问题:新运营商和{}?之间有什么区别吗?如果有,那是什么?
在查看一些遗留代码时,我遇到了一些令人困惑的事情:
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)
?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.
我知道我可以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.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) 在初始化例如新列表时,实际上意味着在括号中使用括号?
new ArrayList<String>()
{
{
add("A");
}
};
Run Code Online (Sandbox Code Playgroud)
这是否意味着创建新的引用方法后是否正在调用?
我正在用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)
或者还有另一种更有效的方法吗?
我有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类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 ×10
arrays ×2
hashmap ×2
block ×1
constructor ×1
gson ×1
if-statement ×1
initializer ×1
list ×1
parameters ×1
this ×1