以这种方式通过对象数组初始化列表是很常见的:
Foo[] objs = ...;
ArrayList<Foo> list = new ArrayList<Foo>(Arrays.asList(objs));
Run Code Online (Sandbox Code Playgroud)
我想知道,有没有理由为什么ArrayList的desiner没有包含带数组作为参数的构造函数,所以它可以像这样初始化:
ArrayList<Foo> list = new ArrayList<Foo>(objs);
Run Code Online (Sandbox Code Playgroud)
可能是它违反了一些原则,线程安全或其他什么?
我有点迷失方向让这个发生得最快.我有一大堆具有基本变量属性的对象(带有getter/setter),我需要在此列表中进行搜索,以查找列表中与给定参数匹配的对象
我已经找到了如何进行常规列表搜索但我需要,例如搜索为列表中的每个对象执行调用getName()的结果的值,并获取具有与我的输入匹配的结果的对象.
像下面的东西,第三个参数是方法调用的结果,第二个参数是我想要找到的.
int index = Collections.binarySearch(myList, "value", getName());
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏
在我的特定用例中,我想知道如何在Go中实现以下Java代码 -
class Channel {
public String name;
public Channel(){}
}
ArrayList<Channel> channels = new ArrayList<Channel>();
Run Code Online (Sandbox Code Playgroud)
我已经开始了,我认为这将是Go in Channel的合适结构 -
struct Channel {
name string
}
Run Code Online (Sandbox Code Playgroud)
我只需要知道ArrayList如何在Go中工作
在我发布这个问题之前,我在这里发现了类似的问题.但答案是基于一个字符串.但是,我在这里有不同的情况.我不是要删除String而是另一个名为AwardYearSource的对象.该类有一个名为year的int属性.所以我想删除基于年份的重复项.即如果有不止一次提到的2010年,我想删除该AwardYearSource对象.我怎样才能做到这一点?
我有一个由Objects填充的ArrayList.
我调用的对象类Article有两个字段;
public class Article {
private int codeArt;
private String desArt;
public Article(int aInt, String string) {
this.desArt = string;
this.codeArt = aInt;
}
public int getCodeArt() {return codeArt; }
public void setCodeArt(int codeArt) {this.codeArt = codeArt;}
public String getDesArt() {return desArt;}
public void setDesArt(String desArt) { this.desArt = desArt;}
}
Run Code Online (Sandbox Code Playgroud)
我想使用该desArt字段过滤我的List ,对于测试我使用了字符串"test".
我使用谷歌的Guava,它允许我过滤ArrayList.
这是我试过的代码:
private List<gestionstock.Article> listArticles = new ArrayList<>();
//Here the I've filled my ArrayList
private List<gestionstock.Article> filteredList filteredList = Lists.newArrayList(Collections2.filter(listArticles, Predicates.containsPattern("test")));
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用.
有没有办法确定ArrayList是否包含不同ArrayList的任何元素?
像这样:
list1.contains(any element of list2)
Run Code Online (Sandbox Code Playgroud)
循环遍历所有元素list2并以唯一的方式逐个检查元素?
我有一个有四个答案的Hashmap.我有前两个问题.我就是这样做的
// Awnsers question 1
antwoorden1.put("Hypertext Preprocessor", true);
antwoorden1.put("Hypertext PHPprocessor", false);
antwoorden1.put("Hypertext processor", false);
antwoorden1.put("Preprocessor PHP", false);
// Awnsers question 2
antwoorden2.put("Model view config", false);
antwoorden2.put("Model view connect", false);
antwoorden2.put("Model view controllers", false);
antwoorden2.put("Model view controller", true);
Run Code Online (Sandbox Code Playgroud)
现在我需要访问所有这些信息,所以我要做的是将两个HashMaps添加到一个ArrayList
// Add the Hashmaps to the arrayList
alleAntwoorden.add(antwoorden1);
alleAntwoorden.add(antwoorden2);
Run Code Online (Sandbox Code Playgroud)
但是我如何循环遍历ArrayList以从HashMap获取键和值?这是我已经尝试过的.
for(int i = 0; i < alleAntwoorden.size(); i++)
{
for (Map.Entry<String, Boolean> entry : alleAntwoorden.get(i).entrySet())
{
String key = entry.getKey();
Object value = entry.getValue();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到以下消息:不兼容的类型
Antwoorden1,antwoorden2和alleAntwoorden定义为:
private ArrayList<HashMap> …Run Code Online (Sandbox Code Playgroud) 在查找(测试)另一个问题的信息时,我遇到了一些问题,完全不知道为什么会这样.现在,我知道没有实际的理由这样做,这是绝对可怕的代码,但为什么这是有效的:
ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0));
Run Code Online (Sandbox Code Playgroud)
所以,基本上,我将一个Object添加到Quods的ArrayList中.现在,我看到java如何无法有效地检查这一点,因为它必须查看所有引用,这些引用可能甚至不存储在任何地方.但是为什么get()有效呢?是不是get()假设返回一个Quod实例,就像它在Eclipse中将鼠标放在它上面时所说的那样?如果它在承诺返回Quod类型的对象时可以返回一个只是对象的对象,那么当我说我将返回一个int时,为什么我不能返回一个String?
事情变得更加怪异.这会因为运行时错误(java.lang.ClassCastException错误)(!?!?)而崩溃:
ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0).toString());
Run Code Online (Sandbox Code Playgroud)
为什么我不能在对象上调用toString?为什么println()方法调用它的toString很好,但不是直接用于我?
编辑:我知道我没有对我创建的第一个ArrayList实例做任何事情,所以它实际上只是浪费处理时间.
编辑:我在Java 1.6上使用Eclipse其他人说他们在运行java 1.8的Eclipse中得到了相同的结果.但是,在其他一些编译器上,两种情况都会引发CCE错误.
我有一个哈希映射,我正在尝试将密钥转换为列表.这是代码:
List<ARecord> recs = new ArrayList<ARecord>();
HashMap<String, ARecord> uniqueRecs = new HashMap<String, ARecord>();
for(ARecord records:recs){
if(!uniqueRecs.containsKey(records.getId())){
uniqueRecs.put(records.getId(), records);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候
List<ARecord> finalRecs = new ArrayList<ARecord>(uniqueRecs.keySet());
Run Code Online (Sandbox Code Playgroud)
错误:
构造函数ArrayList(Set)未定义".
如何将Hashmap密钥转换为List<ARecord>finalRecs?
我试图了解如何将的Double值包含在ArrayList中Integer。的numList是ArrayList的Integer,并且从它的值是一个Double。
这是代码:
package bounded.wildcards;
import java.util.ArrayList;
import java.util.List;
public class GenericsDemo {
public static void main(String[] args) {
// Invariance Workaround
List<Integer> numList = new ArrayList<>();
GenericsDemo.invarianceWorkaround(numList);
System.out.println(numList);
}
static <T extends Number> void invarianceWorkaround(List<T> list) {
T element = (T) new Double(23.3);
list.add(element);
}
}
Run Code Online (Sandbox Code Playgroud)
这将编译并运行而不会出现错误。