Java 返回最接近val的元素的广义规划

Java 返回最接近val的元素的广义规划,java,Java,需要实现类似java.util.Collections的类的方法 具有静态方法的库类,这些方法旨在为一般元素集合提供有用的功能。如果它们是整数元素,我知道怎么做。现在我需要将代码转换为广义类型。任何帮助都将不胜感激 发件人: 导入java.util.array; 公共最终类选择器{ 私有选择器(){ } 公共静态最近整数(int[]a,int val){ 如果(a==null | | a.length==0){ 抛出新的IllegalArgumentException(“a为null或长度为零

需要实现类似java.util.Collections的类的方法 具有静态方法的库类,这些方法旨在为一般元素集合提供有用的功能。如果它们是整数元素,我知道怎么做。现在我需要将代码转换为广义类型。任何帮助都将不胜感激

发件人:

导入java.util.array;
公共最终类选择器{
私有选择器(){
} 
公共静态最近整数(int[]a,int val){
如果(a==null | | a.length==0){
抛出新的IllegalArgumentException(“a为null或长度为零”);
}
int-idx=0;
int distance=Math.abs(a[0]-val);
for(int c=1;c如果(cdistance与现有代码一起使用,如果您希望将其转换为泛型,则代码将类似于以下内容:

import java.util.Arrays;

public final class Selector {

  private Selector() {
  } 

  public static <T> T nearest(Collection<T> c, T val, Telemeter<T> tm) {
      if (c == null || c.isEmpty()) {
         throw new IllegalArgumentException("a is null or has zero-length");
      }
      int idx = 0;
      double distance = tm.distance(c.get(0), val);
      for (int i = 1; i < c.size(); i++) {
         double cdistance = tm.distance(c.get(i), val);
         if (cdistance <= distance) {
            idx = i;
            distance = cdistance;
         }
      }
      int theNumber = c.get(idx);
      return theNumber;
   }

}
导入java.util.array;
公共最终类选择器{
私有选择器(){
} 
公共静态T最近(采集c、T值、遥测tm){
如果(c==null | | c.isEmpty()){
抛出新的IllegalArgumentException(“a为null或长度为零”);
}
int-idx=0;
双倍距离=标准距离(c.get(0),val);
对于(int i=1;i如果(cdistance)您需要为生产或学校做这件事吗?您所做的实际上与
Collections
中的
sort()
方法所做的是一样的。这是家庭作业的一部分。任何提示都将非常感谢!您还没有向我们展示
遥测仪的功能;我想它会给您提供某种用户定义的功能两个
T
s之间的“距离”。在这种情况下,您只需基于数组中的
最近的
,使用
迭代器
c
上更新
for
循环,并使用
tm
而不是减号运算。泛化类型指的是双精度或字符串等?
import java.util.Collections;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

public final class Selector {
  private Selector() { }

  public static <T> T nearest(Collection<T> c, T val, Telemeter<T> tm) {
   .
   .
   .
  }
}
import java.util.Comparator;

public interface Telemeter<E> extends Comparator<E> {
  double distance(E e1, E e2);
}
import java.util.Arrays;

public final class Selector {

  private Selector() {
  } 

  public static <T> T nearest(Collection<T> c, T val, Telemeter<T> tm) {
      if (c == null || c.isEmpty()) {
         throw new IllegalArgumentException("a is null or has zero-length");
      }
      int idx = 0;
      double distance = tm.distance(c.get(0), val);
      for (int i = 1; i < c.size(); i++) {
         double cdistance = tm.distance(c.get(i), val);
         if (cdistance <= distance) {
            idx = i;
            distance = cdistance;
         }
      }
      int theNumber = c.get(idx);
      return theNumber;
   }

}