如何将以下代码转换为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]]
想象一下,我有一个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来实现这一点?
有人可以解释复杂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是可以的,而第二次调用甚至无法编译?
我是并行流的新手,并试图制作一个计算值*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中创建一个有序映射(按键的降序排序).我试过了
Map<Integer,Integer> map = new TreeMap<>((a,b)->(b-a));
Run Code Online (Sandbox Code Playgroud)
如果我为同一个任务编写Comparator类,会不会产生任何性能影响?
我正在尝试将应用程序从Java 8迁移到Java 11.当我尝试在IntelliJ中构建项目时,我收到package sun.util does not exist错误?
关于什么事情的任何想法?
谢谢!
当我进行测试时,我遇到了流的问题.
代码如下:
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()时,它会返回最大值.为什么?
HistoryRecord类:
public class DataHistoryRecord {
Long dataCreatedBy;
Long dataModifiedBy;
getters & setters
}
Run Code Online (Sandbox Code Playgroud)
我有List<DataHistoryRecord>,我想用HashSet它创造独特dataCreatedBy和dataModifiedByid.
例如:如果列表有以下两条记录:
HistoryRecord1 with createdBy:1和modifiedBy:2
HistoryRecord2 with createdBy:1和modifiedBy:3
输出HashSet应该有三个值; 1,2,3
注意:请建议没有foreach的方法
我必须转换一个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) 我有一段代码,我一直在努力理解方法参考.
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)
当我使用时Lambdatut::stringLength,我得到了一个类别转换异常,因为String::length工作正常.我在这里混淆了length()函数如何替换函数接口中的方法S apply(T obj)
如果我使用lamTut::stringLength,我得到一个编译时异常:
LambdaTut类型中的方法funtionTut(Function)不适用于参数(lamTut :: stringLength)
java-8 ×10
java ×9
java-stream ×5
comparator ×2
lambda ×2
dictionary ×1
heap ×1
java-11 ×1
list ×1
optional ×1
treemap ×1