小编nan*_*sen的帖子

相当于Java 8 Date和Time API中的jodatime Interval

Java 8处理时间的方式似乎已经有了很大改进,我开始考虑在某些情况下替换jodatime.但我缺少的是等同于Interval类.

我还没有深入挖掘Java 8,所以我可能错过了那里的东西.有没有人有关于如何最好地处理间隔的想法?

jodatime java-8

41
推荐指数
1
解决办法
2万
查看次数

使用TestExecutionListener时,Spring测试注入不起作用

我想结合使用自定义TestExecutionListenerSpringJUnit4ClassRunner我的测试数据库上运行Liquibase架构设置.我的TestExecutionListener工作正常,但是当我在我的类上使用注释时,测试中的DAO注入不再起作用,至少实例为null.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/applicationContext-test.xml" })
@TestExecutionListeners({ LiquibaseTestExecutionListener.class })
@LiquibaseChangeSet(changeSetLocations={"liquibase/v001/createTables.xml"})
public class DeviceDAOTest {

    ...

    @Inject
    DeviceDAO deviceDAO;

    @Test
    public void findByCategory_categoryHasSubCategories_returnsAllDescendantsDevices() {
        List<Device> devices = deviceDAO.findByCategory(1); // deviceDAO null -> NPE
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

听众很简单:

public class LiquibaseTestExecutionListener extends AbstractTestExecutionListener {

    @Override
    public void beforeTestClass(TestContext testContext) throws Exception {
        final LiquibaseChangeSet annotation = AnnotationUtils.findAnnotation(testContext.getTestClass(),
                LiquibaseChangeSet.class);
        if (annotation != null) {
            executeChangesets(testContext, annotation.changeSetLocations());
        }
    }

    private void executeChangesets(TestContext testContext, String[] changeSetLocation) throws SQLException, …
Run Code Online (Sandbox Code Playgroud)

java spring spring-test liquibase

14
推荐指数
2
解决办法
8365
查看次数

为什么guava Multimap.values()返回一个扁平集合而不是集合集合?

我真的很喜欢Multimap谷歌番石榴库的类.它是一种地图类型,您可以在其中为键添加多个值,因此它可以有效地从键映射到某种类型的集合.我特别喜欢的是一个Multimaps.index()函数,它接受一个Iterable和一个键函数,并返回一个Multimap组(或索引或​​映射)的元素,Iterable该函数为每个元素返回的值.

我发现有点奇怪的是Multimap.values()返回一个扁平集合而不是集合集合?因此,对索引函数进行分组会让我失去一次Ì检索值.我可以通过调用Multimap.asMap()然后调用values()来解决这个问题.

有谁知道为什么Multimap行为那样可能有意义?

java collections guava

11
推荐指数
2
解决办法
5058
查看次数

Clojure的"丰富"网络应用程序

在构建基于Clojure的Web应用程序时,我遇到了一些困难.这是一个简单的CRUD应用程序,我开始探索Clojure网络生态系统.我正在尝试不同的库,如Hiccup,Enlive,CompojureNoir(尽管Noir似乎处于弃用的边缘).

我的问题实际上是两个问题.首先是建立clojure网络应用程序的公平缺乏.其次,我需要一些关于创建"丰富"html组件的提示.

我喜欢Clojure的方式是让不同的库一起玩的简易性.用打嗝取代活泼,反之亦然.一切都发挥其单一而简单的作用.与JSF这样的复杂框架有很大不同.

但有一点:这种伟大的自由让我感到有些失落.在JSF中我知道everthing在哪里有它的位置.我使用Spring集成所有组件,Spring-Security来处理所有会话内容.组件库使我免于处理html,javascript和ajax问题的压力.

特别是前面提到的组件库是Clojure所缺少的.我发现自己实现的东西就像数据表一样,具有交替行颜色,分页,列排序,增量过滤等功能.它让我对如何同步这些组件的浏览器和服务器状态提出了疑问,尤其是在包含ajax时.我无法在网上找到任何成熟的答案.

框架的优点:一旦您理解了规则和限制,您就可以构建应用程序并专注于业务规则.处理技术基础设施,不应分散注意力.

对Clojure世界有什么建议?是ClojureScript一个一个解决方案吗?我还没有调查过.有没有人知道任何提供类似功能的组件库,例如RichFaces数据表?有没有一种处理ajax的首选方式?


web-applications clojure clojurescript

11
推荐指数
1
解决办法
1616
查看次数

Clojure:惯用的召唤方式包含?在一个懒惰的序列

是否有一种惯用的方法来确定LazySeq是否包含元素?从Clojure 1.5开始,调用contains?抛出IllegalArgumentException:

IllegalArgumentException contains? not supported on type: clojure.lang.LazySeq      
clojure.lang.RT.contains (RT.java:724)
Run Code Online (Sandbox Code Playgroud)

在1.5之前,据我所知,它总是返回false.

我知道调用contains?LazySeq可能永远不会返回,因为它可能是无限的.但是如果我知道它不是并且不关心它是否被热切评估呢?

我想出的是:

(defn lazy-contains? [col key]
  (not (empty? (filter #(= key %) col))))
Run Code Online (Sandbox Code Playgroud)

但它感觉不太对劲.有没有更好的办法?

clojure lazy-sequences

10
推荐指数
2
解决办法
4179
查看次数

在clojure中实现undo/redo的模式

是否存在在clojure或fp中实现撤消/重做功能的既定模式?

在OO语言中,我会使用命令模式,但因为它是关于状态我不知道它是否在clojure中是惯用的.

有没有可以提供帮助的图书馆?

design-patterns functional-programming clojure

6
推荐指数
1
解决办法
1004
查看次数

Clojure:为什么if-let只允许绑定向量中的2个表单?

当我使用if-let之类的时候

(if-let [a 2 b nil] (+ a b))
Run Code Online (Sandbox Code Playgroud)

我得到一个IllegalArgumentException:

clojure.core/if-let requires exactly 2 forms in binding vector...
Run Code Online (Sandbox Code Playgroud)

类似于when-let ...

这不是我所期望的.If-let可以尝试所有绑定并在一个失败时中断并评估else表达式.

同样的抱怨可以在clojuredocs的评论中找到.我在这里找到了一个并不真正满足的答案,因为海报似乎有一个等同于嵌套的if-let-structure的想法.

有什么理由限制*-let宏的绑定?

更新:由于似乎不清楚,我对if-let的期望是:

  • 它应该按顺序评估所有绑定.
  • 当一切都成功时,它应该评估'当时'的情况.
  • 如果一个绑定失败,它应立即打破并评估'else'案例.
  • 如果失败,绑定,即使是成功的绑定,也不应该在'else'表达式中可用

clojure

6
推荐指数
1
解决办法
875
查看次数

我应该将Java用于为clojure应用程序设计的自定义Swing组件吗?

我想要一个简单的时间轴组件(如视频编辑软件)用于clojure/seesaw应用程序,我想知道它是一个很好的方法直接用clojure和跷跷板实现这个或者我是否应该在java中编写它并使我的clojure包装器周围.

或者更一般地说:是一种最适合编写UI小部件的函数式编程语言?没有很多国家参与,我无法想象这样做.并不是首先为UI开发发明的OO?

swing clojure seesaw

5
推荐指数
1
解决办法
354
查看次数

Liquibase:检查是否设置了属性

如果设置了自定义属性,我找不到检查前提条件元素的方法.

到目前为止,我发现的这个问题就在这里.正如票证注释所示,如果不修改API ,扩展CustomPrecondition将无济于事.还有另外一种方法吗?

liquibase

2
推荐指数
1
解决办法
1617
查看次数

无法从跷跷板监听器功能中访问或更新原子

我有一个带文本编辑器的跷跷板ui.编辑器内容由名为"Task"的记录支持,该记录包含在名为"state"的原子中.编辑器上的密钥释放事件应该更改属性:任务的desc.我使用以下代码:

(def state
     (atom {:tasks []
            :interval nil
            :style (style :foreground :black :background nil)}))

(defn on-text-edited [ui listener-fn]
  (let [editor (select ui [:#editor])]  
    (listen editor :key-released
        (fn [evt] (listener-fn (text editor))))))

(defn update-task! [task text]
  (let [newtask (assoc task :desc text)
        tasks (replace {task newtask} (:tasks @state))]
  (swap! state
     #(assoc % :tasks tasks))))

(def text-updates (on-text-edited frame #(update-task! selected-task %)))
Run Code Online (Sandbox Code Playgroud)

selected-task是一个引用编辑器当前内容模型的atom.每当用户编辑更新任务的文本时!函数应该被调用.但没有任何反应.该函数似乎根本没有被调用.当我从repl调用它时,它的行为与预期一致.

我测试了函数是否会通过让它执行一个简单的println来调用它:

(defn update-task! [task text]
   (println (str task " " text)))
Run Code Online (Sandbox Code Playgroud)

现在,当我在编辑器中编辑文本时,该功能正常工作.然后我把它改为:

(defn update-task! [task text]
  (let [newtask …
Run Code Online (Sandbox Code Playgroud)

clojure seesaw

1
推荐指数
1
解决办法
269
查看次数