标签: java-8

如何将 Java 方法参考代码转换为 Kotlin

我在Java中有这个代码:

mViewModel.getSetupData().observe(this, this::updateTime);
Run Code Online (Sandbox Code Playgroud)

注册方法接受一个参数。将此代码转换为 Kotlin 时,以下内容不起作用:

mViewModel?.getSetupData()?.observe(this, ::updateTime)
Run Code Online (Sandbox Code Playgroud)

IDE (android studio) 抱怨

类型不匹配。要求:观察者。找到 KFunction1。

有什么线索吗?

java-8 kotlin android-studio method-reference android-livedata

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

如果值为 null 且包含选定值,则禁用组合框

我有两个组合框示例组合框 a 和 b。当comboBox an 为空并且从comboBox a 中选择特定值时,我想禁用comboBox b。

comboboxb.disableProperty().bind(
        JavaFxObserver.toBinding(
        JavaFxObservable.nullableValuesOf(comboboxa.getSelectionModel().selectedItemProperty())
            .map(test -> !comboboxaEnum.isPresent() || comboboxaEnum.equals(comboboxaEnum.XX) ))
    );
Run Code Online (Sandbox Code Playgroud)

只有在 comboBox 为空时才禁用。

lambda combobox javafx java-8

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

流过滤器中的 ContainsIgnoreCase 以计算字符串列表中某个特定单词的出现次数

我想在 java 中的字符串列表中计算单个单词的出现次数。看似这个任务很简单,但我遇到了一个问题,单词以大写字母开头或包含,.在单词末尾。我的方法看起来像:

public static Long countWordOccurence(List<String> wordList, String word) {

    return wordList.stream()
        .filter(s -> word.contains(s))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        .values()
        .stream()
        .findFirst()
        .orElse((long) -1);
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码在正常情况下工作正常,但问题发生在像字符串末尾的昏迷Test,或以大写字母开头的字符串这样的角落情况下。

我正在拆分我的字符串列表,如:

Arrays.asList(TEXT_TO_PARSE.split(" ")); 
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我会很感激避免额外的依赖,但如果有必要,我不会鄙视。

我将不胜感激关于如何在流中修复我的过滤器子句以正确计算字符串的建议。

java functional-programming java-8 java-stream

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

如何在用 Kotlin 编写的接口中使用 Java 8 默认方法的特性

我在 Java 中有一个类 A,在 Kotlin 中有一个接口 B。

// kotlin
interface B {
    fun optional()
}
Run Code Online (Sandbox Code Playgroud)
// java
class A implements B {
}
Run Code Online (Sandbox Code Playgroud)

我想在 Kotlin 接口 (B) 中编写默认方法(Java 8 特性),并想在类 A 中实现它,我该如何实现?

提前致谢。

java interface java-8 kotlin default-method

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

流如何在内部处理数据?

如果我在流上执行多个操作,它们是如何在内部计算的。

  1. 它是否以与输入集合相同的顺序计算?
  2. 它是否将函数应用于所有元素,然后移动以评估下一个函数?或者它将所有功能应用于一个元素,然后是第二个元素......依此类推。
  3. 在性能方面,它与对集合执行的正常迭代有何不同。

    List<Integer> ee = new ArrayList<Integer>();
    Function<? super Integer, ? extends Integer> f1 = x -> x * 2;
    Function<? super Integer, ? extends Integer> f2 = x -> x * x;
    Function<? super Integer, ? extends Integer> f3 = x -> x / 2;
    ee.stream().map(f1.compose(f2.andThen(f3))).collect(Collectors.toList());

    ee.stream().map(f1).map(f2).map(f3).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

编辑问题以添加多个地图操作。在多个地图函数应用的情况下如何计算地图函数。在谈论非并行流时,元素的计算顺序是否仅取决于输入集合的类型(即对于列表、linkedHashmap、sortedset 和无序对于 hashSet 等)。另外,我能否对流的内部工作有更多的了解,以便更好地决定何时不建议使用流以及何时建议使用最多。(集合大小、序列的性质等)

java java-8 java-stream

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

学习 Java 8 - 用于地图输入

是否有更简单的方法来使用 Java 8 实现以下代码?

    Enumeration headerNames = request.getHeaderNames();
    List<Entry<String, String>> headers = new ArrayList<>();
    while (headerNames.hasMoreElements()) {
        String headerName = (String) headerNames.nextElement();
        headers
            .add(Map.entry(headerName, request.getHeader(headerName)));
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

是的,请求是 HttpServletRequest

java java-8

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

如何使用 Java 8 groupingBy 收集不同类型的列表?

我正在尝试获取类型A -> A为 的地图,并将其分组为A to List<A>. (也颠倒了键值关系,但我认为这不一定相关)。

这就是我现在所拥有的:

private static Map<Thing, List<Thing>> consolidateMap(Map<Thing, Thing> releasedToDraft) {

    // Map each draft Thing back to the list of released Things (embedded in entries)
    Map<Thing, List<Map.Entry<Thing, Thing>>> draftToEntry = releasedToDraft.entrySet().stream()
            .collect(groupingBy(
                    Map.Entry::getValue,
                    toList()
            ));

    // Get us back to the map we want (Thing to list of Things)
    return draftToEntry.entrySet().stream()
            .collect(toMap(
                    Map.Entry::getKey,
                    ThingReleaseUtil::entriesToThings
            ));
}

private static List<Thing> entriesToThings(Map.Entry<Thing, List<Map.Entry<Thing, Thing>>> entry) {
    return entry.getValue().stream()
            .map(Map.Entry::getKey)
            .collect(toList());
}
Run Code Online (Sandbox Code Playgroud)

我想在单个语句中执行此操作,并且我觉得必须可以将 …

java reducing java-8 groupingby

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

覆盖对象类方法中的交互与抽象类

以下代码编译得非常好。

据我了解,这不应该是因为Class C实施interface I

因为抽象类也无法编译。

interface I {
    public String toString();
}

class C implements I {

}
Run Code Online (Sandbox Code Playgroud)

抽象类未编译

abstract class MyAbstractClass {
    public abstract String toString();
}

public class MyClass extends MyAbstractClass {
}
Run Code Online (Sandbox Code Playgroud)

请帮助我理解这种行为为什么抽象没有编译而接口呢?

java abstract-class interface java-8

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

将列表中的项目分组并总结所有其他字段 Android,在 recyclerview 中显示结果

我有一个具有这种结构的 Firebase 数据库

{
  "foo" : {
    "data" : {
      "2019-12-01" : [ {
        "item1" : 8,
        "item2" : 16,
        "name" : "user1"
      }, {
        "item1" : 9,
        "item2" : 18,
        "name" : "user2"
      } ],
      "2019-12-02" : [ {
        "item1" : 2,
        "item2" : 26,
        "name" : "user1"
      }, {
        "item1" : 6,
        "item2" : 6,
        "name" : "user2"
      } ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在recyclerviewer以一种非常简单的方式填写主要活动:

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;

    private RecyclerView.LayoutManager layoutManager;
    private …
Run Code Online (Sandbox Code Playgroud)

java android java-8 java-stream android-recyclerview

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

将增强循环转换为 Java 8 Streams,过滤

我正在尝试学习 Java 8。有没有办法将下面的方法转换为 Java 8 Streams、filter 和 forEach。如果是这样,如何?

String[] couponList = coupons.split(",");

for(String coupon:couponList) {
  singleCouponUsageCount = getSingleCouponUsageCount(coupon);
  if(singleCouponUsageCount >= totalUsageCount)
    return 0;
}
return 1;

//

for(String coupon:couponList) {
  singleCouponUsageCount = getSingleCouponUsageCount(coupon);
  if(singleCouponUsageCount >= totalUsageCount)
    return singleCouponUsageCount;
}
return singleCouponUsageCount;
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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