小编Flo*_*own的帖子

创建长度为N的新数组的最快方法,并通过重复给定数组来填充它

我想分配一个长度为N的新数组,并通过重复给定的数组来填充它.界面如下所示:

<T> T[] repeat(T[] array, int n);
Run Code Online (Sandbox Code Playgroud)

澄清我的意思是一个小例子:

String a = {"a", "b", "c"};
//     b = {"a", "b", "c", "a", "b", "c", "a", "b", "c", "a"}
String b = repeat(a, 10); 
Run Code Online (Sandbox Code Playgroud)

大多数程序员将提出以下解决方案(为了简化数组生成,选择了特定类型):

public String[] repeat(String[] array, int n) {
  String[] repeated = new String[n];
  for (int i = 0; i < n; i++) {
    repeated[i] = array[i % array.length];
  }
  return repeated;
}
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

java arrays performance repeat

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

Java 8:groupby with Comparator

我有一个int列表例如(1,2,4,6,7,8).我想知道Java 8中是否存在创建列表列表的问题.

如果

(x,y)->x+1=y 
Run Code Online (Sandbox Code Playgroud)

它应该在同一个列表中.

在此示例中,输出应为:

(1,2), (4), (6,7,8)
Run Code Online (Sandbox Code Playgroud)

我可以这样写:

public static List<List<int>> group(List<int> list, GroupFunctionByOrder groupFunction) {

    List<List<int>> result = new ArrayList<>();

    for (int l : list) {

        boolean groupFound = false;
        for (List<int> group : result) {
            if (groupFunction.sameGroup(l, group.get(group.size()-1))) {
                group.add(l);
                groupFound = true;
                break;
            }
        }

        if (! groupFound) {
            List<int> newGroup =  new ArrayList<>();
            newGroup.add(l);
            result.add(newGroup);
        }
    }

    return result;
}

public class GroupFunctionByOrder {
    public boolean sameGroup(int l1, int  l2){
        return l1+1 == l2; …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

使用Java 8流API和lambdas来操作地图

我有一个Integers的地图,我需要遍历地图的所有条目以将它们添加到String中,但首先,我需要将结果限制为特定的数量,然后根据值对它们进行排序.地图(首先排序然后限制会更有效率).

所以,为了做到这一点,我使用java 8 Stream API和lambdas表达式,这是我到目前为止编写的代码:

Map<Integer, Integer> allHighScoresPerLevel=highScores.get(levelId);
Set<Map.Entry<Integer, Integer>> sortedHighScores=allHighScoresPerLevel.entrySet()
               .stream().limit(Configuration.MAX_HIGHSCORES_DISPLAYED)
               .map((e)->e).sorted((o1,o2)->(o1.getValue().compareTo(o2.getValue())))
               .collect(Collectors.toCollection(TreeSet::new));
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

java.util.concurrent.ConcurrentHashMap$MapEntry cannot be cast to java.lang.Comparable
Run Code Online (Sandbox Code Playgroud)

我明白了,一个映射条目没有扩展Comparable所以没有自然的方式对条目进行排序,但我特别在排序方法中提供了一个比较器(lambda)来教授如何对条目进行排序.

所以我有两个问题:

1)这样做的正确方法是什么?我究竟做错了什么?

2)Streams线程是否安全?我在多线程环境中工作,所以我应该使用一个返回Tread安全集合的收集器吗?

java lambda multithreading java-8 java-stream

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

如何迭代速度模板中的嵌套地图?

如何迭代速度模板中的嵌套地图?我有

HashMap<String, HashMap<String, HashMap<String, List<MealPlanGroup>>>> termPlans=new HashMap<String, HashMap<String, HashMap<String, List<MealPlanGroup>>>>(); 
Run Code Online (Sandbox Code Playgroud)

这张地图我在java中填充了数据并渲染到html页面,但无法在html页面上迭代

html java velocity hashmap

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

是否可以使用流将此方法转换为java 8?如果有,怎么样?

假设我有一个方法,它采用两个double类型的数组,而不是采用double类型的局部变量'sum',初始值为零.之后,for循环从开始到结束迭代并像这样减去a1 [i] - b [i]并将结果保存到另一个名为minus的局部变量中.比减去*减去并将它与sum变量和末尾总和中的现有值相加.我很困惑如何使用流在java 8中实现这一点.有谁能够帮我?

public double calculate(double[] a1, double[] b2, int start, int end) {
  double sum = 0.0;
  for(int i = start; i < end; i++) {
    final double minus = a1[i] - b2[i];
    sum += minus * minus;
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

java-8

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

当函数在 y 时间间隔内抛出异常时重试函数调用 n 次

我想在一段时间内失败时重试我的函数调用。这样做的最佳方法是什么。这会正常工作吗。

CompletableFuture.runAsync(() -> {
    for (int i = 0; i < 3; i++) {
        try {
            dndService.initateDNDRequest(transactionId, circle, category, "PREPAID");       
            break;
        } catch (Exception e) {
            try {
                TimeUnit.SECONDS.sleep(10);//wait for few minutes while next attempt
            } catch (InterruptedException e1) {
                LOGGER.error("Error while retrying request for DND.");
            }
            LOGGER.error("Request retry for DND count"+i);
        }
    }
}, executor);
Run Code Online (Sandbox Code Playgroud)

java schedule scheduled-tasks java-8 retry-logic

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

如何使用其枚举名称获取枚举ID

public enum EnumCountry implements EnumClass<Integer> {

  Ethiopia(1),
  Tanzania(2),
  private Integer id;

  EnumCountry(Integer value) {
    this.id = value;
  }

  public Integer getId() {
    return id;
  }

  @Nullable
  public static EnumCountry fromId(Integer id) {
    for (EnumCountry at : EnumCountry.values()) {
      if (at.getId().equals(id)) {
        return at;
      }
    }
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有上面的代码.如何使用其枚举名称获取Enum Id.

java enums cuba cuba-platform

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

如何将代码转换为使用CompletableFuture?

我曾经有一个可调用的类

class SampleTask implements Callable<Double> {
  @Override
  public Double call() throws Exception {
    return 0d;
  }
}
Run Code Online (Sandbox Code Playgroud)

我曾经用来ExecutorService提交Callable.如何改用CompletableFuture.supplyAsync

以下代码无法编译

SampleTask task = new SampleTask();
CompletableFuture.supplyAsync(task);
Run Code Online (Sandbox Code Playgroud)

不存在变量U类型的实例,因此SampleTask符合Supplier

java java-8

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

java JDBC:由以下原因引起:java.sql.SQLException:数字溢出

您好,我在运行 JAVA 代码时遇到 bwlow 错误

Caused by: java.sql.SQLException: Numeric Overflow
at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4380) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:111) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
at oracle.jdbc.driver.NumberCommonAccessor.getObject(NumberCommonAccessor.java:3263) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
at oracle.jdbc.driver.T4CVarnumAccessor.getObject(T4CVarnumAccessor.java:303) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
at oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:2049) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
at oracle.jdbc.driver.OracleCallableStatementWrapper.getObject(OracleCallableStatementWrapper.java:815) ~[ojdbc-11.2.0.2.0.jar:11.2.0.2.0]
Run Code Online (Sandbox Code Playgroud)

java jdbc

0
推荐指数
1
解决办法
3万
查看次数