标签: peek

在Java流中,窥视真的只用于调试吗?

我正在阅读有关Java流和发现新事物的内容.我发现的新事物之一是peek()功能.几乎所有我读过的内容都说它应该用来调试你的Streams.

如果我有一个Stream,每个帐户都有一个用户名,密码字段以及login()和loggedIn()方法,该怎么办?

我也有

Consumer<Account> login = account -> account.login();
Run Code Online (Sandbox Code Playgroud)

Predicate<Account> loggedIn = account -> account.loggedIn();
Run Code Online (Sandbox Code Playgroud)

为什么会这么糟糕?

List<Account> accounts; //assume it's been setup
List<Account> loggedInAccount = 
accounts.stream()
    .peek(login)
    .filter(loggedIn)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在据我所知,这完全符合它的目的.它;

  • 获取帐户列表
  • 尝试登录每个帐户
  • 过滤掉任何未登录的帐户
  • 将登录的帐户收集到新列表中

做这样的事情的缺点是什么?有什么理由我不应该继续吗?最后,如果不是这个解决方案呢?

其原始版本使用.filter()方法如下;

.filter(account -> {
        account.login();
        return account.loggedIn();
    })
Run Code Online (Sandbox Code Playgroud)

java peek java-8 java-stream

115
推荐指数
7
解决办法
4万
查看次数

如何在Python生成器中展望一个元素?

我无法弄清楚如何在Python生成器中展望一个元素.一看,它就消失了.

这就是我的意思:

gen = iter([1,2,3])
next_value = gen.next()  # okay, I looked forward and see that next_value = 1
# but now:
list(gen)  # is [2, 3]  -- the first value is gone!
Run Code Online (Sandbox Code Playgroud)

这是一个更实际的例子:

gen = element_generator()
if gen.next_value() == 'STOP':
  quit_application()
else:
  process(gen.next())
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我写一个发电机,你可以看一个元素前进吗?

python generator peek

68
推荐指数
8
解决办法
3万
查看次数

Java 8与Java 9中的Stream.peek()方法

我正在学习Java 8 lambda表达式的过程,并且想问一下peek我遇到的与函数接口中的方法有关的以下Java代码.

在IDE上执行程序时,它不提供输出.我原以为它会给2, 4, 6.

import java.util.Arrays;
import java.util.List;

public class Test_Q3 {

    public Test_Q3() {
    }

    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3);
        values.stream()
              .map(n -> n * 2)
              .peek(System.out::print)
              .count();
    }
}
Run Code Online (Sandbox Code Playgroud)

java lambda peek java-8 java-9

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

java BlockingQueue没有阻塞偷看?

我有一个阻塞队列的对象.

我想写一个阻塞的线程,直到队列中有一个对象.与BlockingQueue.take()提供的功能类似.

但是,由于我不知道我是否能够成功处理对象,我想只是peek()而不是删除对象.我想删除该对象只有我能够成功处理它.

所以,我想要一个阻塞的peek()函数.目前,peek()只是在队列为空时根据javadoc返回.

我错过了什么吗?还有其他方法可以实现此功能吗?

编辑:

如果我只是使用了一个线程安全队列并且偷看和睡觉了?

public void run() {
    while (!exit) {
        while (queue.size() != 0) {
            Object o =  queue.peek();
            if (o != null) {
                if (consume(o) == true) {
                    queue.remove();
                } else {
                    Thread.sleep(10000); //need to backoff (60s) and try again
                }
            }
        }
        Thread.sleep(1000); //wait 1s for object on queue
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我只有一个消费者线程和一个(单独的)生产者线程.我想这不如使用BlockingQueue有效......任何评论都赞赏.

java queue peek blockingqueue

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

在python中偷看一堆

在heapq堆中创建的python堆中偷看的官方方式是什么?现在我有

def heappeak(heap):
  smallest = heappop(heap)
  heappush(heap, smallest)
  return smallest
Run Code Online (Sandbox Code Playgroud)

可以说,不是很好.我可以一直认为这heap[0]是堆的顶部并使用它吗?或者这会假设太多的底层实现?

python heap peek

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

从golang中的缓冲读取器读取特定的字节数

我知道bufio包中golang的特定功能.

func (b *Reader) Peek(n int) ([]byte, error)
Run Code Online (Sandbox Code Playgroud)

Peek返回接下来的n个字节而不推进读者.字节在下次读取调用时停止有效.如果Peek返回少于n个字节,它也会返回一个错误,解释为什么读取很短.如果n大于b的缓冲区大小,则错误为ErrBufferFull.

我需要能够从读取器读取特定数量的字节,这将推动读者.基本上,与上面的功能相同,但它推动了读者.有人知道怎么做到这一点吗?

go peek bufferedreader

29
推荐指数
3
解决办法
3万
查看次数

C相当于fstream的偷看

我知道在C++中,您可以使用以下方式查看下一个字符:in.peek();.

当我试图"查看"C中文件的下一个字符时,我该怎么做呢?

c stdio filestream peek

27
推荐指数
2
解决办法
2万
查看次数

有没有办法偷看stdin缓冲区?

我们知道stdin默认情况下是缓冲输入; 证据就是使用"保留数据"的任何机制stdin,例如scanf():

int main()
{
    char c[10] = {'\0'};
    scanf("%9s", c);
    printf("%s, and left is: %d\n", c, getchar());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

./a.out
你好,
你好,左边是10

10 当然是换行...

我一直很好奇,有没有办法"偷看" stdin缓冲区而不删除那里可能存在的东西?

编辑
一个更好的例子可能是:

scanf("%9[^.]", c);
Run Code Online (Sandbox Code Playgroud)

输入"at.ct"后,现在我还有"data"(ct\n)stdin,而不仅仅是换行符.

c buffer stdin peek

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

我可以偷看BufferedReader吗?

有没有办法检查BufferedReader对象中是否有东西要读?像C++这样的东西cin.peek().谢谢.

java peek bufferedreader

18
推荐指数
3
解决办法
2万
查看次数

C#:实现NetworkStream.Peek?

目前,NetworkStream.PeekC#中没有一种方法.实现这样一个方法的最佳方法是什么,NetworkStream.ReadByte除了返回byte的实际上没有从Stream

c# byte networkstream stream peek

16
推荐指数
3
解决办法
6241
查看次数