我正在尝试为Java创建一个小的功能性编程库(只是为了解决自己的问题)。虽然定义高阶函数为List
S,Set
S和Map
就是我所遇到的这个问题:需要收集的功能,并返回相同类型的具有几乎相同的实现的集合,但必须重新界定为每个数据结构List
-s,Set
s和Map
s。
例如,这是s和s 的map
函数的实现:List``Set
public static <A, B> List<B> map(
List<? extends A> xs,
Func1<? super A, ? extends B> transformer
) {
List<B> ys = new ArrayList<B>();
for(A a : xs) {
ys.add(transformer.apply(a));
}
return ys;
}
public static <A, B> Set<B> map(
Set<? extends A> xs,
Func1<? super A, ? extends B> transformer
) {
Set<B> ys = new HashSet<B>();
for(A a : xs) {
ys.add(transformer.apply(a));
}
return ys;
}
一个filter
函数:
public static <A> List<A> filter(
List<? extends A> xs,
Func1<? super A, Boolean> predicate
) {
List<A> ys = new ArrayList<A>();
for(A a : xs) {
if(predicate.apply(a)) {
ys.add(a);
}
}
return ys;
}
public static <A> Set<A> filter(
Set<? extends A> xs,
Func1<? super A, Boolean> predicate
) {
Set<A> ys = new HashSet<A>();
for(A a : xs) {
if(predicate.apply(a)) {
ys.add(a);
}
}
return ys;
}
如从这个例子可以看出,对于实施方式中的主体Set
和List
几乎相同。
有喜欢很多很多的功能map
,并filter
在我的图书馆,每一类又是对每种类型我很感兴趣,收藏的定义三次(即List
,Set
和Map
)。这导致大量代码重复和代码异味。我想知道Java中是否有某种方法可以帮助我避免所有代码重复。
任何帮助将不胜感激。谢谢。
编辑:
Func1
是定义为的接口:
interface Func1<A, B> {
public B apply(A a);
}
Java没有高阶多态性(又名高阶多态性),因此在类型系统中是不可能的。许多Java程序员使用XML和/或反射(即逃避类型系统)来解决这一缺陷。
Scala可以处理这个问题,您所描述的被称为协变函子。这种相当基本的数据类型(以及更多)已经在Scalaz库中实现,并且包括java.util。*的实现。
此外,还有更多的不是集合的协变函子和更多的不是协变的函子。
如果您想进一步探索该特定概念,则不妨在Google上搜索“ 20个中级Scala练习”。
我正在尝试删除代码的以下部分: 我尝试了以下方法: 但是我收到一个错误: 解析不够。正则表达式 如何使用regex删除上面的代码块? 它从这个url为regex返回的以下代码http://creepypasta.wikia.com/wiki/She_Was_Asking_for_It
问题内容: 所以,我有一个问题。我从Logger捕获了一些东西,输出看起来像这样: 我需要知道如何删除那些讨厌的ASCII颜色代码(或解析它们)。 问题答案: 如果它们是完整无缺的,则应由ESC()加加分号分隔的数字列表加组成。(请参阅http://codingdict.com/questions/131416。)在这种情况下,您可以通过以下方式删除它们: 。。。或者您可以通过检查日志来利用它们。
是否可以重写以下内容,使其不包含任何条件语句?我想使用按位运算之类的东西可能会有一些聪明的技巧? 编辑:澄清一下,我不是在寻找一种去除条件句的通用方法。我正在寻找一个技巧,从这个非常具体的代码中删除条件。把它当成一个学术难题。 举个例子,删除条件(在某些情况下会产生性能增益)的一种方法是预先计算一个查找表,然后用< code>b索引。在这种特殊情况下,这很棘手,因为< code>b可能是一个非常大
本文向大家介绍 一行代码实现删除列表中重复的值相关面试题,主要包含被问及 一行代码实现删除列表中重复的值时的应答技巧和注意事项,需要的朋友参考一下
请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得
本文向大家介绍去除HTML标签删除HTML示例代码,包括了去除HTML标签删除HTML示例代码的使用技巧和注意事项,需要的朋友参考一下