小编Nam*_*man的帖子

用于DoubleFunction的Lambda

以下代码片段来自 https://blogs.oracle.com/javamagazine/quiz-yourself-functional-interfaces-advanced?source=:em:nw:mt::RC_WWMK190726P00001:NSL400004372

DoubleStream ds = DoubleStream.of(1.0, 2.0, 3.0);
DoubleFunction<DoubleUnaryOperator> fun = a -> d -> d + a;
System.out.print(ds.map(fun.apply(1.0)).sum());
Run Code Online (Sandbox Code Playgroud)

在学习lambda的过程中,我了解了类似d -> d+a或什至这样的东西, (d, a) -> d+a
但是尽管知道函数的作用,但我无法弄清楚上述lambda的语法。
有人可以解释一下或给某个教程一个链接吗?
谢谢。

java lambda functional-programming

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

查找地图是否包含集合中的值

我想查看我的Set中是否有任何值用作Map中的键。

我可以做:

Set<String> foo;
for (String val: foo) {
    if (map.containsKey(val)) {
        contains = true;
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么凉吗?

java java-8

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

Java 8:如何从列表中创建映射,在该列表中,键是从与对象(员工)本身相同的类(empID)和值中获取的?

在Java 8中,如何从列表转换为映射的形式empID来自类内部和作为对象本身的值。

List<CompanyEntity> result = 
             ifEntityManager.createNamedQuery("findByEmployeeId", CompanyEntity.class)
             .getResultList();
Map<String, CompanyEntity> result1 = result.stream()
        .collect(Collectors.toMap(CompanyEntity::getEmployeeId, CompanyEntity::this)); ??
Run Code Online (Sandbox Code Playgroud)

我想要第二个参数toMap作为对象本身。有人可以建议如何实现相同目标吗?

我尝试这样做,Collectors.toMap(CompanyEntity::getEmployeeId, this)但无法摆脱编译错误。

java arraylist hashmap java-8 collectors

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

为什么Java Stream sum api以相同的数据类型而不是更大的类型返回总和?

我有一些使用Arrays.stream(int arr [])。sum()添加的整数。它以int返回截断后的总和,而实际总和更大且适合long。为什么流API会通过截断而只返回int而不返回长整数?

尝试使用小整数,例如int myArray [] = {1,5,8}; int sum = Arrays.stream(myArray).sum();

工作正常。

但不适用于其和导致long的更长整数。

下面的情况1可以正常工作并返回14

int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)

而方案2无法使用,因为总和超过32位。它给出的总和为-105032716,而预期值为4189934580

int myArray[] = { 2094967290, 2094967290};
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)

并获得正确的总和,如果我在下面进行操作,则会得到预期的结果4189934580

long sum = 0L + 2094967290+2094967290;
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)

java java-stream

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

带有 PATCH 方法的 Java 11 HttpRequest

我尝试使用 java 11HttpRequest使用 PATCH 方法调用 msgraph webservice:

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;

import java.nio.charset.StandardCharsets;

import groovy.json.JsonSlurper;
import groovy.json.JsonOutput;

access_token = "my_token";

def url = 'https://graph.microsoft.com/v1.0/groups/group_id/drive/items/01P4AIIJ5QTIIAZ2FLEZBIZWRV6KEBIMM5/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/range(address=\'A1\')'

HttpClient httpClient = HttpClient.newBuilder()
                                    .version(HttpClient.Version.HTTP_2)
                                    .build();

jsonPayloadString = '{"values":["blabla"]}';


jsonPayload = HttpRequest.BodyPublishers.ofString(jsonPayloadString.toString())

HttpRequest request = HttpRequest.newBuilder()
                                 .uri(URI.create(url))
                                 .PATCH(jsonPayload)
                                 .header("Content-Type", "application/json")
                                 .build();

HttpResponse response = httpClient.send(request,HttpResponse.BodyHandlers.ofString());

Run Code Online (Sandbox Code Playgroud)

错误 :

没有方法签名:jdk.internal.net.http.HttpRequestBuilderImpl.PATCH() 适用于参数类型:(jdk.internal.net.http.RequestPublishers$StringPublisher) 值:[jdk.internal.net.http.RequestPublishers$ StringPublisher@280a600b]

通话本身效果很好,例如在 Postman 中。但我不能让它在 groovy/java 中工作。

我以前使用过,HttpUrlConnection但它不支持 PATCH。实际上可以使用HttpRequest吗?

我在网上找不到任何使用 PATCH 方法的工作示例。

java groovy httprequest java-http-client java-11

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

Java 8 Streams - 如何比较元素?

我想.txt使用 Java Stream在文件中查找字谜。这是我所拥有的:

try (InputStream is = new URL("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").openConnection().getInputStream();
     BufferedReader reader = new BufferedReader(new InputStreamReader(is));
     Stream<String> stream = reader.lines()) {
Run Code Online (Sandbox Code Playgroud)

以及字谜的方法:

public boolean isAnagram(String firstWord, String secondWord) {
    char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();
    char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();
    Arrays.sort(word1);
    Arrays.sort(word2);
    return Arrays.equals(word1, word2);
}
Run Code Online (Sandbox Code Playgroud)

如何使用 Java 8 Stream 检查 unixdict.txt 中的单词是否是字谜?有没有办法将一个词与流中的所有词进行比较?

java inputstream fileinputstream anagram java-stream

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

使用流计算字符串中字符的出现次数

我试图理解 Java 中流的数据流。我的任务是将每个字母出现在字符串列表中

List<String> words = Arrays.asList("Welcome", "to", "the", "java", "world");
Run Code Online (Sandbox Code Playgroud)

进入

Map<String, Long>
Run Code Online (Sandbox Code Playgroud)

使用单线流。

我知道,首先我们可以从列表中流式传输每个单词,然后我需要将它分成多个字符,然后将每个字符作为键并将其出现作为值进行计数,最后返回整个映射。

理解起来太复杂了。有人可以向我解释怎么做吗?

java lambda java-stream

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

将列表中的项目分组并总结所有其他字段 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
查看次数

Java 8 Stream API:如何处理 Map 中的空值

我有一个 Map 类型的数组列表。我想从列表中过滤掉空值并找到最大值和最小值。除了空值外,该程序运行良好。

ArrayList<Map<String, Float>> elements = new ArrayList<Map<String, Float>>();
Map<String, Float> element = new HashMap<String, Float>();
element.put("a", (float) 1.22);
element.put("b", (float) 1.33);
element.put("c", (float) 1.52);
element.put("d", (float) 1.452);
element.put("e", (float) 1.452);

Map<String, Float> element2 = new HashMap<String, Float>();
element2.put("a", (float) 1.2332);
element2.put("b", (float) 1.242);
element2.put("c", (float) 1.552);
element2.put("d", (float) 15.33);
element2.put("e",null);

elements.add(element);
elements.add(element1);
elements.add(element2);

System.out.println("Initial Mappings are: " + elements);
Map<String, Float> min = elements.stream() 
            .flatMap(m -> m.entrySet().stream())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Math::min));

System.out.println(min);
Run Code Online (Sandbox Code Playgroud)

java dictionary filter java-stream

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