标签: java-8

将Java Stream过滤为1并且只有1个元素

我正在尝试使用Java 8 Stream来查找a中的元素LinkedList.但是,我想保证过滤条件只有一个匹配.

拿这个代码:

public static void main(String[] args) {

    LinkedList<User> users = new LinkedList<>();
    users.add(new User(1, "User1"));
    users.add(new User(2, "User2"));
    users.add(new User(3, "User3"));

    User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
    System.out.println(match.toString());
}
Run Code Online (Sandbox Code Playgroud)
static class User {

    @Override
    public String toString() {
        return id + " - " + username;
    }

    int id;
    String username;

    public User() {
    }

    public User(int id, String username) {
        this.id = id;
        this.username = username;
    }

    public void setUsername(String username) …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

202
推荐指数
13
解决办法
16万
查看次数

android studio error:默认接口方法仅支持从Android N开始(--min-api 24)

我升级到Android工作室3.1,我得到以下错误:

    Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我的gradle配置:

      compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 27
     multiDexEnabled true
     //...
   }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我的目标27已经领先于它抱怨的24个?我该怎么做才能解决这个问题?如果我改为1.8 java不会让我失去很多客户?为什么我在升级android studio之前没有收到此错误.

我不知道这是关于我最近投入的LifecycleObserver类,它是在kotlin中,现在我将其更改为java但在清理项目后仍然得到相同的错误:

public class LifeCycleAwareObserver implements LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void  onAppBackgrounded() {
    AnalyticsUtils.trackStartSession(true);
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
    AnalyticsUtils.trackStartSession(false);
}
Run Code Online (Sandbox Code Playgroud)

}

如何追踪错误的来源,以便我可以修复它?

这是我的版本依赖项:

project.ext {


        firebase_version …
Run Code Online (Sandbox Code Playgroud)

android java-8 kotlin

193
推荐指数
7
解决办法
6万
查看次数

格式化即时字符串

我正在尝试使用新的java 8 time-api和模式将Instant格式化为String:

Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);
Run Code Online (Sandbox Code Playgroud)

使用上面的代码我得到一个异常,它抱怨一个不受支持的字段:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
    at java.time.Instant.getLong(Instant.java:608)
    at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
    ...
Run Code Online (Sandbox Code Playgroud)

java datetime datetime-format java-8 java-time

192
推荐指数
5
解决办法
14万
查看次数

Java 8 Stream和对数组的操作

我刚刚发现了新的Java 8流功能.来自Python,我想知道现在是否有一种简洁的方法可以对数组进行操作,例如求和,以"一行pythonic"方式将两个数组相乘?

谢谢

java arrays java-8 java-stream

191
推荐指数
4
解决办法
18万
查看次数

Java8:HashMap <X,Y>到HashMap <X,Z>使用Stream/Map-Reduce/Collector

我知道如何ListY- > "转换"一个简单的Java Z,即:

List<String> x;
List<Integer> y = x.stream()
        .map(s -> Integer.parseInt(s))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在我想用Map做基本相同的事情,即:

INPUT:
{
  "key1" -> "41",    // "41" and "42"
  "key2" -> "42      // are Strings
}

OUTPUT:
{
  "key1" -> 41,      // 41 and 42
  "key2" -> 42       // are Integers
}
Run Code Online (Sandbox Code Playgroud)

解决方案不应限于String- > Integer.就像List上面的例子一样,我想调用任何方法(或构造函数).

java mapreduce java-8 java-stream collectors

188
推荐指数
6
解决办法
15万
查看次数

`Optional.orElse()`和`Optional.orElseGet()`之间的区别

我试图理解Optional<T>.orElse()Optional<T>.orElseGet()方法之间的区别.

orElse()方法的描述是"如果存在则返回值,否则返回其他值".

虽然,该orElseGet()方法的描述是"如果存在返回值,否则调用other并返回该调用的结果".

orElseGet()方法采用供应商功能接口,基本上不接受任何参数和返回T.

你需要在哪种情况下使用orElseGet()?如果你有一个方法,你T myDefault()为什么不这样做optional.orElse(myDefault())而不是optional.orElseGet(() -> myDefault())

似乎没有orElseGet()将lambda表达式的执行推迟到以后的某个时间或什么的,所以有什么意义呢?(我本以为如果它返回一个更安全Optional<T>的东西会更有用,它get()永远不会抛出一个NoSuchElementException并且isPresent()总是返回真实......但显然它不是,它只是返回T就像orElse()).

我还缺少其他一些差异吗?

java optional java-8

183
推荐指数
6
解决办法
10万
查看次数

如何在很长的纪元时间内以毫秒为单位创建Java 8 LocalDate?

我有一个外部API返回我的日期为longs,表示自Epoch以来的毫秒数.

使用旧式Java API,我只需用Date它构造一个

Date myDate = new Date(startDateLong)
Run Code Online (Sandbox Code Playgroud)

Java 8 LocalDate/ LocalDateTimeclasses中的等价物是什么?

我有兴趣将长度所代表的时间点转换为long当前本地时区.

java datetime java-8 java-time

182
推荐指数
5
解决办法
15万
查看次数

通过谓词限制流

是否有Java 8流操作限制(可能是无限的)Stream直到第一个元素无法匹配谓词?

在Java 9中,我们可以使用takeWhile下面的示例来打印小于10的所有数字.

IntStream
    .iterate(1, n -> n + 1)
    .takeWhile(n -> n < 10)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么?

java java-8 java-stream

179
推荐指数
9
解决办法
6万
查看次数

使用Java 8将对象列表转换为从toString()方法获取的字符串

Java 8中有许多有用的新东西.例如,我可以在一个对象列表上迭代一个流,然后对来自Object实例的特定字段的值求和.例如

public class AClass {
  private int value;
  public int getValue() { return value; }
}

Integer sum = list.stream().mapToInt(AClass::getValue).sum();
Run Code Online (Sandbox Code Playgroud)

因此,我问是否有任何方法可以构建一个String连接toString()方法的输出与单行中的实例.

List<Integer> list = ...

String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class
Run Code Online (Sandbox Code Playgroud)

假设list包含整数1,2并且3我希望它concatenated"123""1,2,3".

java-8 java-stream

177
推荐指数
5
解决办法
28万
查看次数

Java 8 - 转换列表的最佳方法:map或foreach?

我有一个列表myListToParse,我想过滤元素并在每个元素上应用一个方法,并将结果添加到另一个列表中myFinalList.

使用Java 8,我注意到我可以通过两种不同的方式完成它.我想知道他们之间更有效的方式,并理解为什么一种方式比另一种更好.

我对任何有关第三种方式的建议持开放态度.

方法1:

myFinalList = new ArrayList<>();
myListToParse.stream()
        .filter(elt -> elt != null)
        .forEach(elt -> myFinalList.add(doSomething(elt)));
Run Code Online (Sandbox Code Playgroud)

方法2:

myFinalList = myListToParse.stream()
        .filter(elt -> elt != null)
        .map(elt -> doSomething(elt))
        .collect(Collectors.toList()); 
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

174
推荐指数
4
解决办法
14万
查看次数