当前位置: 首页 > 面试题库 >

删除代码重复

范玄裳
2023-03-14
问题内容

我正在尝试为Java创建一个小的功能性编程库(只是为了解决自己的问题)。虽然定义高阶函数为ListS,SetS和Map就是我所遇到的这个问题:需要收集的功能,并返回相同类型的具有几乎相同的实现的集合,但必须重新界定为每个数据结构List-s,Sets和Maps。

例如,这是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;
}

如从这个例子可以看出,对于实施方式中的主体SetList几乎相同。

有喜欢很多很多的功能map,并filter在我的图书馆,每一类又是对每种类型我很感兴趣,收藏的定义三次(即ListSetMap)。这导致大量代码重复和代码异味。我想知道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示例代码的使用技巧和注意事项,需要的朋友参考一下