当增强的for循环(foreach循环)被添加到Java时,它可以使用数组或目标Iterable.
for ( T item : /*T[] or Iterable<? extends T>*/ ) {
//use item
}
Run Code Online (Sandbox Code Playgroud)
这对于仅实现一种迭代类型的Collection类非常有用,因此只有一个iterator()方法.
但是我发现自己非常沮丧地想要使用Collection类中的非标准迭代器.例如,我最近试图帮助某人使用a Deque作为LIFO /堆栈,然后按FIFO顺序打印元素.我被迫这样做:
for (Iterator<T> it = myDeque.descendingIterator(); it.hasNext(); ) {
T item = it.next();
//use item
}
Run Code Online (Sandbox Code Playgroud)
我失去了for-each循环的优点.这不仅仅是击键.如果我不需要,我不喜欢暴露迭代器,因为很容易犯it.next()两次调用等错误.
理想情况下,我认为for-each循环应该也接受了Iterator.但事实并非如此.那么在这些情况下是否存在使用for-each循环的惯用方法?我也很想听到使用像Guava这样的常见集合库的建议.
我能想出的最好的帮助方法/类是:
for ( T item : new Iterable<T>() { public Iterator<T> iterator() { return myDeque.descendingIterator(); } } ) {
//use item
}
Run Code Online (Sandbox Code Playgroud)
哪个不值得使用.
我很想看到番石榴有类似的东西Iterables.wrap,但没有找到类似的东西.显然,我可以通过类或辅助方法滚动我自己的Iterator包装器.还有其他想法吗?
编辑:作为旁注,任何人都可以给出一个有效的理由,说明为什么增强的for循环不应该只接受一个Iterator?让我使用当前的设计可能会有很长的路要走.
我有一个java应用程序,Spring框架,tomcat上的hibernate,基本上几乎没有安全性,除了登录和注销功能(没有弹簧安全性)
我可以通过以下方式访问控制器中的用户信息:
// where request is HttpServletRequest
HttpSession session = request.getSession(true);
SystemUser user = (SystemUser) session.getAttribute("user");
并做逻辑.但是,我需要在Dao层获取此信息.我实际从数据库中获取数据以检索用户特定数据的位置.一种方法是将"用户"对象传递给服务层,然后将服务层传递给dao层.但这是一项相当大的工作.
我想知道Spring中是否有一种方法可以访问Dao层中的会话对象?或以任何其他方式检索用户特定数据.
请关注我:
我只是想在当前日期添加10年,然后从中减去过期日期以返回年数:
public int getMaxYears() {
int max = 0;
Calendar ten_year_later = Calendar.getInstance();
ten_year_later.setTime(new Date());
ten_year_later.add(Calendar.YEAR, 10);
Calendar expiration = Calendar.getInstance();
expiration.setTime(expiration_date);
max = (int) (ten_year_later.getTimeInMillis() - expiration.getTimeInMillis())/(365 * 24 * 60 * 60 * 1000);
return max;
}
Run Code Online (Sandbox Code Playgroud)
当我调试它时,日历始终保持在当前年份.
任何人 ?
我正在使用此代码,但它不起作用,因为新窗口是我的屏幕的一半(1280x800px):
<a href="javascript:void(0);" onClick="window.open('http://www.stackoverflow.com', '',
'fullscreen=yes');">Open Full Screen Window</a>
Run Code Online (Sandbox Code Playgroud)
为什么?
MySQL操作是多线程的吗?
具体来说,在运行select时,select(或join)算法是否会产生多个线程一起运行?多线程会阻止能够支持很多并发用户吗?
mysql concurrency multithreading computer-science query-optimization
我在没有Visual Studio的盒子上安装了最新的Gallio版本3.2.603,它将是我们的CI服务器.NAnt脚本成功构建了.Net 4.0项目,但是当它尝试运行MSTest测试时,会发生以下错误.
[gallio] Gallio NAnt任务 - 版本3.2 build 601
[gallio] [错误]组装XXXXXXXXXXXXXX
[gallio]无法运行测试,因为找不到MSTest可执行文件
我错误地认为Gallio能够在没有安装MSTest可执行文件或任何其他Visual Studio组件的情况下运行MSTest测试吗?
我有一个具有以下结构的软件项目.
- Library A - Library B - Main program - Test for Main
我有四个项目文件(csproj),但如果我可以在一个解决方案资源管理器中调试/编译这些项目,那将是一件好事.
我在JAXMag的Scala特殊问题中遇到了以下代码:
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = position
private lazy val position = "(%s, %s)".format(x, y)
}
Run Code Online (Sandbox Code Playgroud)
lazy val上述代码中的使用是否比下面的代码提供了更多的性能?
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = "(%s, %s)".format(x, y)
}
Run Code Online (Sandbox Code Playgroud)
或者只是一个不必要的优化案例?
java ×3
calendar ×1
concurrency ×1
file-io ×1
foreach ×1
gallio ×1
guava ×1
html ×1
javascript ×1
mstest ×1
mysql ×1
python ×1
scala ×1
security ×1
session ×1
spring ×1
svn ×1
tortoisesvn ×1
unit-testing ×1