我有一个从数据库收到的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) 我有一个函数返回一个函数,Flow其逻辑涉及将图形的一些元素Sink传递给作为参数传递的辅助.我想保留辅助Sink的物化值,这样我就可以在构造流启动时对其值进行操作.
这是我正在建设的流程的粗略图片:
IN ~> (logic: In => Out) ~> Broadcast ~> AuxFilter ~> AuxSink
~> OutFilter ~> OUT
Run Code Online (Sandbox Code Playgroud)
示例代码:
case class Incoming()
trait Element
case class Outcoming() extends Element
case class Persistent() extends Element
def flow[Mat](auxSink: Sink[Persistent, Mat]): Flow[Incoming, Outcoming, NotUsed] = {
val isPersistent = Flow[Element].collect {
case persistent: Persistent => persistent
}
val isRunning = Flow[Element].collect {
case out: Outcoming => out
}
val magicFlow: Flow[Incoming, Element, NotUsed] = Flow[Incoming]
.map(_ => …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行基于表单的身份验证.我正确配置了部署描述符,IBM Infocenter中列出的所有操作都与"仅使用基于文件的注册表启用用户身份验证"相关,将我的用户映射到适当的角色,单击确定,测试并且工作正常.但是当我转到管理控制台中的其他内容时,我意识到"安全角色到用户/组映射"中没有"正常","保存"或"应用"按钮,因此我的所有更改都只能采取措施当我留在那个页面上时,只要我点击控制台中的链接,所有更改都会立即重置.我认为它可能是控制台中的一个错误.有解决方案吗?也许是一种使用这些属性直接编辑xml文件的方法?
提前致谢.
嘿,我正在尝试测试以下课程:
class Foo {
def f: Int = 4 + g
def g: Int = 2
}
Run Code Online (Sandbox Code Playgroud)
我的测试如下:
class FooSpec extends PlaySpec with MockFactory {
val foo = new Foo()
"Foo" must {
"Call function f" in {
(foo.g _)
.expects()
.once()
.returns(5)
foo.f must be (9)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试失败说:
java.lang.NoSuchMethodException: Foo.mock$g$0()
java.lang.Class.getMethod(Unknown Source)
...
Run Code Online (Sandbox Code Playgroud)
我不确定为什么...
我正在使用 scalatest 和 scalamock :
"org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0" % "test"
"org.scalamock" %% "scalamock-scalatest-support" % "3.2.2" % "test"
Run Code Online (Sandbox Code Playgroud) 在代理服务器后面使用Windows 7、64位。
我已经下载并安装了最新版本的SBT(0.13.11),Scala(2.11.8)和IntelliJ IDEA社区(2016.1.2)。当我尝试在IntelliJ中启动新项目时,我可以使用的最新SBT版本是0.13.8,而不是0.13.11。有谁知道为什么会这样吗?如果我尝试开始一个新项目,则会收到错误消息:
错误:导入SBT项目时出错:
...[警告] ::无法解决的依赖:: [警告] ::::::::::::::::::::::::::::::::::::::::::::::::: [警告] :: org.scala-lang#scala-library; 2.11.8:未找到 [警告] :: org.scala-lang#scala-compiler; 2.11.8:未找到 [警告] ::::::::::::::::::::::::::::::::::::::::::::::::: [警告] [警告]注意:未解决的依赖项路径: [警告] org.scala-lang:scala-library:2.11.8((sbt.Classpaths)Defaults.scala#L1203) [警告] +-默认值:untitled1_2.11:1.0 [警告] org.scala-lang:scala-compiler:2.11.8 [警告] +-默认值:untitled1_2.11:1.0 [trace]禁止堆栈跟踪:对完整输出运行'last *:update'。 [trace]堆栈跟踪被抑制:对完整输出运行'last :ssExtractDependencies'。 [错误](:update)sbt.ResolveException:未解决的依赖项:org.scala-lang#scala-library; 2.11.8:找不到 [错误]未解决的依赖关系:org.scala-lang#scala-compiler; 2.11.8:找不到 [错误](*:ssExtractDependencies)sbt.ResolveException:未解决的依赖关系:org.scala-lang#scala-library; 2.11.8:找不到 [错误]未解决的依赖关系:org.scala-lang#scala-compiler; 2.11.8:找不到 [错误]总时间:4秒,已于2016年5月25日上午10:51:00完成 Java HotSpot(TM)64位服务器VM警告:忽略选项MaxPermSize = 384M;在8.0中删除了支持 提起_JAVA_OPTIONS:-Djava.net.preferIPv4Stack = true
请参阅C:\ Users \ Rk.IdeaIC2016 \ system \ log \ sbt.last.log中的完整日志
修改了一会儿之后,我发现sbt about在终端上键入内容时,我被告知我具有SBT版本0.13.8,该版本是针对Scala 2.10.4构建的。看起来不对!如果我进入IntelliJ并选择SBT构建为0.13.8,Scala构建为2.10.4,我不会出错!
因此,这非常令人困惑,因为尚不清楚代理是否是问题所在。似乎如果我可以将SBT更新到版本0.13.11,那么整个工作就可以了。
任何见识或帮助将不胜感激-我很高兴学习Scala,但是这些技术难题使我停滞不前。