标签: java-8

嵌套ifs在Java中使用Boolean的替代方法

我有下面的代码块

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中实现上述代码的更好,更快的方法.

java collections if-statement switch-statement java-8

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

重用同一个lambda表达式的一部分

我有以下情况:

  //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"(AB).有没有解决方案来避免这种重复?

java lambda java-8 java-stream

-2
推荐指数
2
解决办法
185
查看次数

使用lambda表达式创建一个匿名类?

Java 8支持lambda表达式,我想知道我们是否可以用lambda表达式替换匿名类?

java java-8

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

Java8方式来处理if..else签入集合

下面是我的代码,我想在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"

请建议我更好地处理这两种情况.

java java-8

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

使用 Java 8 模式匹配将 Map 转换为 List

我需要将那些与 Address1 匹配的员工密钥存储到一个新的List<EmpData>,代码如下,我可以通过正常迭代来完成。

我可以使用java8模式匹配做的collectfilter等?

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)

java regex dictionary java-8 java-stream

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

Lambda 中的局部变量与匿名内部类

在查看 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 lambda anonymous-class java-8

-2
推荐指数
2
解决办法
64
查看次数

无法在 java 8 中导入 java.util.stream

我在导入时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)

java collections java-8 java-stream

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

为什么我们不能在类中为方法添加默认值

如果我们没有在默认情况下向方法添加任何访问说明符,则它是默认类型。

但是我们添加了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 java-8

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

Java - 从对象列表中删除 null

我有一个巨大的 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)

由于列表大小会很大,我如何有效地删除空值?

java list arraylist java-8

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

流 flatMap 与地图

要过滤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 collections stream java-8

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