Tag: java 8

打破听众的递归

我试图打破一个使这段代码递归的特殊情况。 我有一个Javafx游戏,其中有人和计算机玩家在轮到他的时候玩,并且可以有很多回合。 计算机应该自动播放并立即移动到下一个播放器并且不向UI显示任何直接指示(但是可以查看它之后做了什么)。 问题是在只有电脑玩家的情况下,我们会在当前装载电脑的时候来到这里,输入条件,因为所有玩家都是电脑,设置下一个播放器的电路板,然后无需完成通话,请拨打此电话同样的function: currentBoardPane.addListener((e) -> { if(gameManager.checkIfCurrentPlayerIsComputer()){ gameManager.playAutoMovesForCurrentPlayer(); gameManager.setNextPlayer(); // it does current player property = next player //update board on scene currentBoardPaneIndex = ((currentBoardPaneIndex + 1) % gameManager.getPlayers().size()); currentBoardPane.setValue(boardPanes.get((currentBoardPaneIndex))); //this is a recursive call } }); 取而代之的是,如果我在GameManager为currentPlayer属性订阅一个监听器,那么我仍然需要从该监听器调用setNextPlayer() ,这又是递归的。 如果所有玩家都是计算机,我可以制作一个特例,然后从一段while(true){}而不是听众和绑定运行游戏,但必须有更好的方法来打破这种递归。 还有一种方法是在没有听众和绑定的情况下不进入递归吗? 笔记: currentBoardPane表示屏幕上的当前游戏板,它是一个ObjectProperty 。

并行消息使用Java8流API从令牌分隔的输入流解组

是否有可能使用Java8流API创建接口,如Message pullNext()在分隔的输入流之上检测,逻辑步骤如下所示? 从字符输入流中读取分隔的标记 用于并行unmarshaller的令牌(一个令牌 – >一个消息) 邮件将重新排序以保留原始传入订单 消息可以使用前面提到的pullNext() 有点破坏者和unmarshal阶段由并发池服务。 与此类似,也许(在InputStream之上实现stash是要解决的问题): Iterable stash = Iterables.cycle(“one”, “two”, “three”); Iterator sink = StreamSupport.stream(stash.spliterator(), true). .parallel().map((x)->x+”-unmarshalled”).iterator(); while (sink.hasNext()) process(sink.next()); // do something with decoded message

如何使用公共密钥从地图的内部地图获取所有值?

我有一张地图地图: HashMap<String, Map> 。 我只需要使用DistinctCode从内部地图中提取String值。 我怎么能在一行或一个声明中这样做? 换句话说,我需要一个像这样的方法: mapOfMap.find(distinctcode) 它是否可以在一行或声明中使用?

从java.util.function.Function获取方法名称

是否可以获取java.util.function.Function的方法名称。 我想每次都记录正在使用的方法的名称。 下面的示例打印Lambda对象,但我还没有找到一种简单的方法来获取方法名称: public class Example { public static void main(String[] args) { Example ex = new Example(); ex.callService(Integer::getInteger, “123”); } private Integer callService(Function sampleMethod, String input) { Integer output = sampleMethod.apply(input); System.out.println(“Calling method “+ sampleMethod); return output; } }

Function接口中的exception处理

我是Java 8中的Function接口的新手。这个问题与使用函数接口抽象公共代码的问题有关。 从中得到想法我写的如下: public void act(Input1 input) throws NonRetriableException, InvalidInputException { Function func = item -> { try { activityManager.update(item); return true; } catch (InterruptedException | JSONException e) { throw new NonRetriableException(e); } catch (LockUnavailableException e) { throw new NonRetriableException(e); } }; try { lockManager.executeWithLock(input.getTaskID(), input, func); } catch (LockUnavailableException e) { log.error(“{}”,e); throw new […]

使用HashBasedTable作为累加器的Guava ImmutableTable的Java 8收集器给出了IllegalAccessError

通过返回ImmutableTable方法的字符串处理列表。 例如ImmutableTable process(String item) { /*…*/} 。 收集结果,即合并所有结果(单个表可能包含重复项)并返回ImmutableTable 。 当没有重复项时,我当前的实现工作: final ImmutableTable result = itemsToProcess.parallelStream() .map(item -> ProcessorInstanceProvider.get() .buildTable(item)) .collect(toImmutableTable()); public static Collector<ImmutableTable, ImmutableTable.Builder, ImmutableTable> toImmutableTable() { return Collector.of( ImmutableTable.Builder::new, ImmutableTable.Builder::putAll, ( a, b) -> a.putAll(b.build()), ImmutableTable.Builder::build); } 但收集ImmutableTable时失败,因为存在重复的行列条目,因此构建失败。 如何防止构建失败? 我如何使用HashBaseTable ,它将与重复项一起使用。 像T – ImmutableTable , A – HashBasedTable和R – ImmutableTable内存使用量最少吗? 试过: final HashBasedTable result […]

java 8 switch case默认为类类型的break

我一直在寻找java的切换类型,我在这里找到了一个解决方案: 在java中切换类型 但问题是,解决方案并不像是一个带有break的switch ,确定会发生这种情况,因为我循环使用了Consumer ,我想知道一种修改我当前代码的好方法或清理替代方法来处理我的类类型, 在句柄第一次匹配后中断并且默认是仅处理不匹配(这里是父类StripeObject )。 我的业务是处理来自webhooks的条带事件,我正在使用stripe-java ,所以我的代码现在是这样的: public void handleWebHookEvent(Event eventJson) throws CardException, APIException, AuthenticationException, InvalidRequestException, APIConnectionException { Stripe.apiKey = configuration.getString(AppConstants.STRIPE_API_KEY); // Verify the event by fetching it from Stripe Event event = Event.retrieve(eventJson.getId()); Logger.debug(AppUtils.concatStrings(“|-> Event Received: [“, event.getId(), “] Type: [“, event.getType(), “] Request ID: [“, event.getRequest(), “]”)); handleEventObject(event.getData().getObject()); } private void […]

如何根据给定的模式重新排列列表中的项目?

我有id列表,如下所示:5,3,2,4,1,然后我用DB查询DB中的项目。 但它们来自DB通常按id排序,我的意思是1, 2, 3, 4, 5 。 我需要将它们重新排列为与它们列出的顺序相同。 我怎样才能实现这一目标? 编辑:澄清,因为许多人似乎对这个问题感到困惑。 ID列表用于查询数据库,例如: SELECT * FROM Foo WHERE id in (5, 3, 2, 4, 1) 生成的Foo对象列表的排序方式与ID列表的排序方式不同。 问题是如何获取与初始ID列表具有相同顺序的Foo对象列表。

Java 8 lambda表达式:按顺序对满足给定谓词的所有项进行分组。 分组应将谓词作为关键,将项目作为值

以下是示例输入数据和预期输出。 我想在输入列表上单次迭代执行此操作。 // input Predicate sizeP = f -> f.length() > 1_000_000; // size filter Predicate nameP = f -> f.getName().startsWith(“Plot”); // name filter List fileList; // output // files list which satisfy the filter criteria Map<Predicate,List> rulesToFiles = new HashMap(); // Example data // 1. PlotPresentation.pptx-> 2 MB size // 2. Gen.docx-> 500 KB […]

如何使用java并行流而不是executorThreadsPool?

我想编写一个测试,对我的API执行许多并行调用。 ExecutorService executor = Executors.newCachedThreadPool(); final int numOfUsers = 10; for (int i = 0; i { final Device device1 = getFirstDevice(); final ResponseDto responseDto = devicesServiceLocal.acquireDevice(device1.uuid, 4738); if (responseDto.status == Status.SUCCESS) { successCount.incrementAndGet(); } }); } 我知道我可以使用executorThreadsPool来做到这一点,如下所示: devicesList.parallelStream() .map(device -> do something) 我可以用java8并行流创建它: 我怎么能在一台设备上做到这一点? 这意味着我很少想要获得相同的设备。 像这样的东西: {{device}}.parallelStream().execute(myAction).times(10)