我有一百万行.txt格式的数据.格式很简单.对于每一行:
user1,value1 user2,value2 user3,value3 user1,value4 ...
你知道我的意思.对于每个用户,它可能会出现多次,或只出现一次(您永远不会知道).我需要找出每个用户的所有值.因为用户可能会随机出现,所以我使用了Hashmap来完成它.即:HashMap(key:String,value:ArrayList).但是要向arrayList添加数据,我必须经常使用HashMap get(key)来获取arrayList,为它添加值,然后将其放回HashMap.我觉得效率不高.有人知道更好的方法吗?
我知道我可以在JPA中将列表传递给命名查询,但NamedNativeQuery怎么样?我尝试了很多方法,但仍然无法将列表传递给NamedNativeQuery.任何人都知道如何将列表传递给NamedNativeQuery中的in子句?非常感谢你!
NamedNativeQuery如下:
@NamedNativeQuery(
name="User.findByUserIdList",
query="select u.user_id, u.dob, u.name, u.sex, u.address from user u "+
"where u.user_id in (?userIdList)"
)
Run Code Online (Sandbox Code Playgroud)
它被称为这样:
List<Object[]> userList = em.createNamedQuery("User.findByUserIdList").setParameter("userIdList", list).getResultList();
Run Code Online (Sandbox Code Playgroud)
但结果并不像我预期的那样.
System.out.println(userList.size()); //output 1
Object[] user = userList.get(0);
System.out.println(user.length); //expected 5 but result is 3
System.out.println(user[0]); //output MDAVERSION which is not a user_id
System.out.println(user[1]); //output 5
System.out.println(user[2]); //output 7
Run Code Online (Sandbox Code Playgroud) 我有一个从数据库收到的DTO列表,他们有一个ID.我想确保我的列表包含具有指定ID的对象.显然,在这种情况下使用期望字段创建一个对象将无济于事,因为contains()调用Object.equals(),它们将不相等.
我想出了一个类似的解决方案:创建一个接口HasId,在我的所有DTO中实现它,并继承带有方法的新类的ArrayList contains(Long id).
public interface HasId {
void setId(Long id);
Long getId();
}
public class SearchableList<T extends HasId> extends ArrayList<T> {
public boolean contains(Long id) {
for (T o : this) {
if (o.getId() == id)
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我不能将List和ArrayList强制转换为SearchableList ......我会接受它,但我想确保我不是在发明自行车.
编辑(2016年10月):
当然,随着Java 8中lambda的引入,这样做的方法很简单:
list.stream().anyMatch(dto -> dto.getId() == id);
Run Code Online (Sandbox Code Playgroud) 说我有一个像这样的列表:
List<String> list = new ArrayList<>();
list.add("a");
list.add("h");
list.add("f");
list.add("s");
Run Code Online (Sandbox Code Playgroud)
在遍历此列表时,我想在列表的末尾添加一个元素.但我不想迭代新添加的元素,我想迭代到列表的初始大小.
for (String s : list)
/* Here I want to add new element if needed while iterating */
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我怎么做?
这是将ArrayList从服务器发送到客户端的程序的一部分.我想删除有关此代码中最后一行的警告:
客户代码:
Socket s;
(...)
// A server is sending a list from the other side of the link.
ois = new ObjectInputStream(s.getInputStream());
MyList = (ArrayList<MyVariable>) ois.readObject();
Run Code Online (Sandbox Code Playgroud)
MyVariable是一个具有一些属性的Java类.服务器正在创建一个ArrayList并用MyVariable变量填充它作为项目.然后它将完整列表发送给客户端.
我想知道为什么我会在那里发出警告以及如何完美编码以获得0警告.如果有可能我想避免使用"@SuppressWarnings("unchecked")".;)
谢谢,
路易斯
在实例化ArrayLists时,我习惯于看到这样的代码
ArrayList<Type> arr = new ArrayList<Type>();
Run Code Online (Sandbox Code Playgroud)
要么
ArrayList<Type> arr = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
但是今天我遇到了一个如下所示的ArrayList实例:
ArrayList<Type> arr = new <Type>ArrayList();
Run Code Online (Sandbox Code Playgroud)
发生了什么,为什么会给出"不安全的操作"编译警告?
我想知道这样的代码:
List<String> list = new ArrayList<String>();
for(CustomObject co : objects) {
list.add(co.getActualText());
}
Run Code Online (Sandbox Code Playgroud)
可以用不同的方式书写吗?我的意思是当然在某些时候会有一个循环,但我想知道是否有一个我忽略的API用法
我想知道Array,ArrayList和List之间的确切区别是什么(因为它们都有类似的概念)以及在哪里使用一个而不是另一个.
示例:
Array
对于Array,我们只能添加我们为此示例声明的类型int.
int[] Array = new Int[5]; //Instansiation of an array
for(int i = 0; i < Array.Length; i++)
{
Array[i] = i + 5; //Add values to each array index
}
Run Code Online (Sandbox Code Playgroud)
ArrayList
我们可以像Array一样添加值
ArrayList arrayList = new ArrayList();
arrayList.Add(6);
arrayList.Add(8);
Run Code Online (Sandbox Code Playgroud)
List
再次我们可以像在Array中一样添加值
List<int> list = new List<int>();
list.Add(6);
List.Add(8);
Run Code Online (Sandbox Code Playgroud)
我知道在List中你可以拥有泛型类型所以你可以传入任何你不能在数组中做的类型,但我的确切问题是:
我有课A,B,C和D那里B延伸A,C扩展A和D延伸A.
我有以下ArrayList几个,其中包含一些元素:
ArrayList<B> b;
ArrayList<? extends A> mix = b;
Run Code Online (Sandbox Code Playgroud)
我打算让变量mix包含类型的元素B,C或D.我试图类型的元素加入C到mix这样的:
mix.add(anElementOfTypeC);
Run Code Online (Sandbox Code Playgroud)
但IDE不允许我这样做,它说:
通过调用转换的方法,无法将anElementOfTypeC转换为CAP#1,其中CAP#1是一个新的类型变量:CAP#1从捕获?延伸A.
我使用<? extends A>得当吗?我该如何解决这个问题?