标签: java-8

如何使用java Lambda创建/初始化ArrayList的ArrayList

如何将以下代码转换为java8中的lambda ???

    List<List<String>> my2dList = new ArrayList<List<String>>();
    int counter = 0;
    for (int i = 0; i < 5; i++) {
        my2dList.add(new ArrayList<String>());
        for (int j = 0; j < 10; j++) {
            System.out.println("Counter: " +counter);
            my2dList.get(i).add(new String(""+counter));
            counter++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

预期结果:

[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17,18,19],[20,21, 22,23,24,25,26,27,28,29],[30,31,32,33,34,35,36,37,38,39],[40,41,42,43,44, 45,46,47,48,49]]

java lambda java-8

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

如何使用另一个列表中的Map属性创建一个新列表

想象一下,我有一个List<Map<String,Object>>:

[{'id':1,'name':'xyz'},{'id':2,'name':'abc'},{'id':3,'name':'pqr'}]
Run Code Online (Sandbox Code Playgroud)

我需要生成另一个列表,包括上面列表中的名称:

List<String>
Run Code Online (Sandbox Code Playgroud)

避免使用循环,是否可以通过使用java stream api来实现这一点?

java dictionary list java-8 java-stream

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

java 8中的复杂比较器

有人可以解释复杂Comparators的以下变体之间的区别吗?

List<String> listOfStrings = Arrays.asList("algo", "test", "is", "a", "common");

listOfStrings.stream()
             .sorted(Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()))
             .sorted(Comparator.naturalOrder().thenComparing(Comparator.comparingInt(String::length))
             .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

为什么第一次调用sorted是可以的,而第二次调用甚至无法编译?

java type-inference comparator java-8 java-stream

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

java 8并行流混淆/问题

我是并行流的新手,并试图制作一个计算值*100(1到100)并将其存储在地图中的示例程序.在执行代码时,每次迭代都会有不同的数量.我可能在某个地方错了所以请指导我,任何人都知道正确的方法.

代码:

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.Collectors;

public class Main{    
    static int l = 0;       
    public static void main (String[] args) throws java.lang.Exception {
        letsGoParallel();
    }       
    public static int makeSomeMagic(int data) {
        l++;
        return data * 100;
    }        
    public static void letsGoParallel() {
        List<Integer> dataList = new ArrayList<>();
        for(int i = 1; i <= 100 ; i++) {
            dataList.add(i);
        }
        Map<Integer, Integer> resultMap = new HashMap<>();
        dataList.parallelStream().map(f -> {
            Integer xx = 0;
            {
                xx = …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

哪个更快?使用自定义Comparator类或lambda函数

我试图在java中创建一个有序映射(按键的降序排序).我试过了

Map<Integer,Integer> map = new TreeMap<>((a,b)->(b-a));
Run Code Online (Sandbox Code Playgroud)

如果我为同一个任务编写Comparator类,会不会产生任何性能影响?

heap lambda treemap comparator java-8

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

从Java 8升级到Java 11 - 包sun.util不存在

我正在尝试将应用程序从Java 8迁移到Java 11.当我尝试在IntelliJ中构建项目时,我收到package sun.util does not exist错误?

关于什么事情的任何想法?

谢谢!

java java-8 java-11

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

Java 8流的最大值(Math :: max)

当我进行测试时,我遇到了流的问题.

代码如下:

public class HelloWorld {
    public static void main(String []args) {

    List<Integer> integers = Arrays.asList(-2, -5, -7, -16);
    Integer integer = integers.stream().max(Math::max).orElse(0);
    System.out.println(integer);

    }
} 
Run Code Online (Sandbox Code Playgroud)

返回值为-15,即列表中的最小数字.但是当我将max()更改为min()时,它会返回最大值.为什么?

java java-8 java-stream

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

如何使用Java8 Stream从对象中获取多个字段值,从List <Object>创建HashSet?

HistoryRecord类:

public class DataHistoryRecord {

Long dataCreatedBy;
Long dataModifiedBy;
getters & setters

}
Run Code Online (Sandbox Code Playgroud)

我有List<DataHistoryRecord>,我想用HashSet它创造独特dataCreatedBydataModifiedByid.

例如:如果列表有以下两条记录:

HistoryRecord1 with createdBy:1和modifiedBy:2

HistoryRecord2 with createdBy:1和modifiedBy:3

输出HashSet应该有三个值; 1,2,3

注意:请建议没有foreach的方法

java java-8 java-stream

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

java将一个可选类型转换为另一个可选类型

我必须转换一个Optional<EmployeeModel>对象Optional<EmployeeDto>,我正在寻找一些比下面两个更好/更清洁的选项.

选项1:

public Optional<EmployeeDto> findById(String employeeId){
    Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
    return Optional.ofNullable(toEmployeeDto(toEmployeeDto.orElse(null)));
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
    if(employeeModel != null) {//We need this because orElse passes null
        //return EmployeeDto (convert EmployeeModel to dto)
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

选项2:

public Optional<EmployeeDto> findById(String employeeId){
    Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
    if(employeeModel.isPresent()) {
        return Optional.of(toEmployeeDto(employeeModel.get()));
    } else {
        return Optional.empty();
    }
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
    //isPresent()check already done so no null checks
    //return EmployeeDto (convert …
Run Code Online (Sandbox Code Playgroud)

java optional java-8

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

方法参考:功能界面

我有一段代码,我一直在努力理解方法参考.

private static String s;

public static void main(String[] args) {
    // TODO Auto-generated method stub
    LambdaTut lamTut = new LambdaTut();
    Function<String, Integer> lenghthFunction = (a) -> a.length();
    lamTut.funtionTut(LambdaTut::stringLength);

}


public int stringLength() {
    System.out.println(s);
    return s.length();
}
public <T, S> void funtionTut(Function<T, S> function) {
    Function<T, String> sqFunction = function.andThen(a -> "Length:" + a);
    System.out.println(sqFunction.compose((a) -> (T) ("Name:" + a)).apply("Demo"));
}
Run Code Online (Sandbox Code Playgroud)
  1. 当我使用时Lambdatut::stringLength,我得到了一个类别转换异常,因为String::length工作正常.我在这里混淆了length()函数如何替换函数接口中的方法S apply(T obj)

  2. 如果我使用lamTut::stringLength,我得到一个编译时异常:

    LambdaTut类型中的方法funtionTut(Function)不适用于参数(lamTut :: stringLength)

java java-8 method-reference

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