我有下面的代码块
if(Objects.nonNull(isMine)) {
if (isMine) {
this.books= // gets it from the database;
} else {
this. books= // gets it from the database
}
} else {
this. books = // gets it from the database
}
Run Code Online (Sandbox Code Playgroud)
isMine - 是一个布尔对象,我尝试使用switch case,将isMine转换为字符串,如下所示
String.valueOf(isMine)
Run Code Online (Sandbox Code Playgroud)
但是没有用.建议在java中实现上述代码的更好,更快的方法.
我有以下情况:
//Case 1
final Set<String> first = A.stream().filter().map().collect()
//Case 2
final Set<String> second = B.stream().filter().map().collect()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我将两次调用相同的lambda表达式,但使用不同的"consumer"(A或B).有没有解决方案来避免这种重复?
下面是我的代码,我想在Java8中编写更好的等效代码
List<String> fruits = Arrays.asList("Apple","Orange","Banana");
List<String> animals = Arrays.asList("Tiger","Lion","Monkey");
@SuppressWarnings("all")
Map<String,List<String>> allLists = new HashMap() {{
put("fruits",fruits);
put("animals",animals);
}};
Run Code Online (Sandbox Code Playgroud)
传统的Java8检查方式
if(allLists.get("fruits")!=null) {
List<String> fruits1 = allLists.get("fruits");
if(fruits1.contains("Apple")) {
System.out.println("Apple is there");
}
}
Run Code Online (Sandbox Code Playgroud)
Java8做的方式..
Consumer<List<String>> consumer1 = arg ->{
Optional.of(arg.contains("Apple")).filter(value -> value.equals(true)).ifPresent(value1 -> System.out.println("Apple is available"));
};
Optional.of(allLists.get("fruits")).ifPresent(consumer1);
Run Code Online (Sandbox Code Playgroud)
目前Java8的方式是返回输出"Apple is available"..
问题是,如果Apple不在ArrayList中我该怎么处理...例如:如果Apple不在列表中,我想打印"Apple is not Available"
请建议我更好地处理这两种情况.
我需要将那些与 Address1 匹配的员工密钥存储到一个新的List<EmpData>,代码如下,我可以通过正常迭代来完成。
我可以使用java8模式匹配做的collect和filter等?
public static void main(String[] args) {
List<EmpData> lst1 = new ArrayList<EmpData>();
List<EmpData> lst2 = new ArrayList<EmpData>();
EmpData obj1=new EmpData("100", "Name1", "25/05/1979");
EmpData obj2=new EmpData("101", "Name2", "25/05/1975");
EmpData obj3=new EmpData("103", "Name3", "25/05/1976");
lst1.add(obj1);
lst1.add(obj2);
lst2.add(obj3);
HashMap<String, List<EmpData>> map = new HashMap<>();
map.put("Address1Emp1", lst1);
map.put("Address2Emp2", lst2);
List<EmpData> listEmp = new ArrayList<>();
//Need to store those employees key matching Address1 to a List<EmpData>
}
Run Code Online (Sandbox Code Playgroud) 在查看 lambda 表达式时,我发现了匿名内部类和 lambda 表达式的以下行为。这背后的原因可能是什么?
Human h = new Human() {
int a = 2;
@Override
public void sing() {
System.out.println(++a);
}
};
h.sing();
h.sing();
Run Code Online (Sandbox Code Playgroud)
输出/输出
3
4
Run Code Online (Sandbox Code Playgroud)
而对于 lambda,我得到以下结果:
Human h = () -> {
int a = 2;
System.out.println(++a);
};
h.sing();
h.sing();
}
Run Code Online (Sandbox Code Playgroud)
输出/输出
3
3
Run Code Online (Sandbox Code Playgroud) 我在导入时java.util.stream.*;
遇到问题编译我的代码给了我一个流()
“找不到符号错误”。
这是我的进口清单
import java.util.stream.*;
import java.util.*;
import java.lang.String;
import java.util.Arrays;
import java.nio.file.*;
import java.io.IOException;
Run Code Online (Sandbox Code Playgroud)
这是我正在编译的代码
List<Beverage> l = cantine.stream()
.filter(p -> p.name.equals(nam))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
重要提示:我知道什么是“找不到符号错误”,所以请不要盲目关闭这个问题。
完整代码供参考
import java.util.stream.*;
import java.util.*;
import java.lang.String;
import java.util.Arrays;
import java.nio.file.*;
import java.io.IOException;
public class Enoteca{
Map<String,Beverage> cantine;
public Enoteca(){
this.cantine = new HashMap<String,Beverage>();
}
public List<Beverage> byName(String nam){
List<Beverage> l = cantine.stream()
.filter(p -> p.name.equals(nam))
.collect(Collectors.toList());
}
public static void main(String[] args){
Enoteca e = new Enoteca();
for(String s: args){
Beverage b …Run Code Online (Sandbox Code Playgroud) 如果我们没有在默认情况下向方法添加任何访问说明符,则它是默认类型。
但是我们添加了default关键字然后它给了我错误,就像我们只能在接口中使用默认方法一样。我知道函数式接口中的默认方法,但奇怪为什么它在 eclipse 中显示错误。
public class Test
{
default void test() { //Default methods are allowed only in interfaces.
}
}
Run Code Online (Sandbox Code Playgroud)
这个工作正常
public class Test
{
void test()
{
}
}
Run Code Online (Sandbox Code Playgroud)
有什么理由吗?
我有一个巨大的 java 列表对象,如下所示:
List<Object[]> res = // repo method that will return query result
Run Code Online (Sandbox Code Playgroud)
我必须从 res 对象中删除空值。
到目前为止,我尝试了以下方法,但似乎没有任何效果:
1. res.remove(null);
2. res.removeAll(Collections.singleton(null));
3. res.removeAll(null);
4. while(res.remove(null));
Run Code Online (Sandbox Code Playgroud)
由于列表大小会很大,我如何有效地删除空值?
要过滤List我们可以使用
a1.stream().filter(x->x>6).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
并过滤我使用的两个列表 FlatMap
Stream<List<Integer>> s2=Stream.of(a1,a2);
s2.flatMap(x->x.stream()).sorted().filter(x->x>6).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
但我尝试以这种方式过滤单个 List
Stream<List<Integer>> s1=Stream.of(a1);
s1.map(x->x.stream()).filter(x->x>2).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
我有一个错误--- The operator > is undefined for the argument type(s) Stream<Integer>, int
但是当我在地图中使用 flatMap 时没有错误为什么
Stream<List<Integer>> s1=Stream.of(a1);
s1.flatMap(x->x.stream()).filter(x->x>2).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×10
collections ×3
java-stream ×3
lambda ×2
arraylist ×1
dictionary ×1
if-statement ×1
list ×1
regex ×1
stream ×1