Tag: collections

是否有标准的Java List实现,不允许向它添加null?

假设我有一个List ,我知道我永远不想为它添加null 。 如果我向它添加null,则意味着我犯了一个错误。 所以每次我调用list.add(item)我会调用if (item == null) throw SomeException(); else list.add(item); if (item == null) throw SomeException(); else list.add(item); 。 是否有一个现有的List类(可能在Apache Commons或其他东西中)为我做这个? 类似的问题: 帮助删除Java列表中的空引用? 但我不想删除所有空值,我想确保它们从未被添加到第一位。

HiLo发电机策略不起作用

我是hibernate的新手。 我想要做的是使用@CollectionId为我的Address类生成一个标识符。 我已经使用了Collection接口。 但是,当我使用@GenericGenerator并将策略设置为hilo时,它会抛出exception。 这是我的代码: @Entity @Table(name = “USER_DETAILS”) public class UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int userId; private String userName; @ElementCollection @JoinTable(name=”USER_ADDRESS”, joinColumns=@JoinColumn(name=”USER_ID”) ) @GenericGenerator(name = “hilo-gen”, strategy = “hilo”) @CollectionId(columns = { @Column(name=”ADDRESS_ID”) }, generator = “hilo-gen”, type = @Type(type=”long”)) private Collection address = new ArrayList(); public int getUserId() { return […]

通过Collections.synchronizedSet(…)。forEach()的迭代是否保证是线程安全的?

我们知道,默认情况下迭代并发集合不是线程安全的,所以不能使用: Set set = Collections.synchronizedSet(new HashSet()); //fill with data for (E e : set) { process(e); } 这是因为在迭代期间可能会添加数据,因为set上没有排它锁。 这在Collections.synchronizedSet的javadoc中描述: public static Set synchronizedSet(Set s) 返回由指定集支持的同步(线程安全)集。 为了保证串行访问,必须通过返回的集完成对后备集的所有访问。 当迭代它时,用户必须手动同步返回的集合: Set s = Collections.synchronizedSet(new HashSet()); … synchronized (s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); } 不遵循此建议可能会导致非确定性行为。 但是 ,这不适用于Set.forEach ,它inheritance了Iterable.forEach的默认方法forEach […]

创建可观察列表/集合

我正在尝试在JavaFX 8中创建一个ChoiceBox ,它需要一个Collection 。 我不知道如何创建一个Collection虽然…如果我尝试: ObservableList list = new ObservableList(); 我收到一个错误,说我无法实例化ObservableList因为它是抽象的。 可以理解的。 如果我查看ObservableList的doc,我可以看到SortedList implements ObservableList ,但是我不能这样做: ObservableList list = new SortedList(); 因为没有适用的构造函数。 显然我需要将一个ObservableList传递给SortedList ,这很奇怪,因为我无法创建一个ObservableList 。 constructor SortedList.SortedList(ObservableList,Comparator) is not applicable (actual and formal argument lists differ in length) constructor SortedList.SortedList(ObservableList) is not applicable (actual and formal argument lists differ in length) 我不知道如何解读。 如果我试试 ObservableList list […]

如何使用ListIterator?

我正在使用ArrayList的iterator: List al = new ArrayList(); // —– Logic for adding elements—– Iterator it = al.iterator(); // logic to retrieve elements—- 然后它尝试使用ListIterator,就像这样。 ListIterator li = al.listIterator(); while(li.hasNext()) { System.out.print(li.next()+” “); } 有效 … 我试过这个用于反向检索 ListIterator li = al.listIterator(); while(li.hasPrevious()) { System.out.print(li.previous()+” “); } 但它不起作用。 以下代码正常运行。 ListIterator li = al.listIterator(al.size()); while(li.hasPrevious()) { System.out.println(li.previous()+” “); } 我想知道有一些generics的概念,但不清楚它。 […]

将结果集值放入Collection对象,然后添加到ArrayList

我正在处理我的resultset以获取详细信息。 我需要返回一个ArrayList ,那么如何将resultset集中的键值放到任何集合对象中,然后将它们放到ArrayList ? 这是代码: public List addBikes() throws ClassNotFoundException, SQLException{ List bikeList = new ArrayList(); Class.forName(“com.mysql.jdbc.Driver”); Connection con = null; Statement stm = null; ResultSet rs = null; con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/spring_hibernate”,”root”,”root”); ; stm=con.createStatement(); String qry=”Select * from bike”; rs=stm.executeQuery(qry); while(rs.next()) { /* I need to put * rs.getString(“name”),rs.getString(“model”) * etc into any of the suitable collection […]

crudrepository findBy元组列表的方法签名

我有一个像这样的实体类: @Entity @Table(name = “CUSTOMER”) class Customer{ @Id @Column(name = “Id”) Long id; @Column(name = “EMAIL_ID”) String emailId; @Column(name = “MOBILE”) String mobile; } 如何使用crudrepository spring data jpa为下面的查询编写findBy方法? select * from customer where (email, mobile) IN ((“a@bc”,”8971″), (“e@fg”, “8888”)) 我期待着类似的东西 List findByEmailMobileIn(List tuples); 我想从给定的对中获取客户列表

为什么无法锁定ConcurrentHashMap进行独占访问?

来自#JCIP的引用: “由于ConcurrentHashMap无法被锁定以进行独占访问,因此我们无法使用客户端锁定来创建新的primefaces操作,例如put-if-absent,就像我们为Vector所做的那样” 为什么我们不能只是获取锁以实现其他primefaces方法并保持集合线程安全 (如Collections.synchronizedxxx工厂返回的同步集合):

LinkedHashSet .equals()vs LinkedList .equals()具有相同的元素但顺序不同

考虑以下SSCCE: public static void main(String[] args) { LinkedHashSet set1 = new LinkedHashSet(); set1.add(“Bob”); set1.add(“Tom”); set1.add(“Sam”); LinkedHashSet set2 = new LinkedHashSet(); set2.add(“Sam”); set2.add(“Bob”); set2.add(“Tom”); System.out.println(set1); System.out.println(set2); System.out.println(set1.equals(set2)); } 这打印: [Bob, Tom, Sam] [Sam, Bob, Tom] true 但是,如果将LinkedHashSet更改为LinkedList : public static void main(String[] args) { LinkedList set1 = new LinkedList(); set1.add(“Bob”); set1.add(“Tom”); set1.add(“Sam”); LinkedList set2 = new […]

Java 1.5等同于.Net中的Predicate 方法吗?

具体来说,我正在为Collection.TrueForAll / Exists等寻找类似的干净表示法。 编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习语。