8000 feat: add ToMap for stream by ppd324 · Pull Request #301 · duke-git/lancet · GitHub
[go: up one dir, main page]

Skip to content

Conversation

ppd324
Copy link
Contributor
@ppd324 ppd324 commented Apr 2, 2025

add ToMap for stream

@cannian1
Copy link
Collaborator
cannian1 commented Apr 6, 2025

@ppd324 main branch was frozen, merge into rc branch.

@ppd324 ppd324 changed the base branch from main to rc April 7, 2025 02:15
cannian1
cannian1 previously approved these changes Apr 7, 2025
@ppd324
Copy link
Contributor Author
ppd324 commented Apr 7, 2025

Is it necessary to add a merge function to the ToMap method to merge key conflicts?
like this:

func ToMap[T any, K comparable, V any](s Stream[T], mapper func(item T) (K, V), mergeFunc func(existing, new V) V) map[K]V {
	m := make(map[K]V, len(s.source))
	for _, v := range s.source {
		key, value := mapper(v)
		if existing, ok := m[key]; ok {
			if mergeFunc != nil {
				m[key] = mergeFunc(existing, value)
				continue
			}
		}
		m[key] = value
	}
	return m
} 

@cannian1
Copy link
Collaborator
func ToMap[T any, K comparable, V any](s Stream[T], mapper func(item T) (K, V), mergeFunc func(existing, new V) V) map[K]V {
	m := make(map[K]V, len(s.source))
	for _, v := range s.source {
		key, value := mapper(v)
		if existing, ok := m[key]; ok {
			if mergeFunc != nil {
				m[key] = mergeFunc(existing, value)
				continue
			}
		}
		m[key] = value
	}
	return m
} 

I think it's better to split this into two functions

Simpler API for common cases

func ToMap[T any, K comparable, V any](s Stream[T], mapper func(item T) (K, V)) map[K]V {
	return ToMapWithMerge(s, mapper, nil)
}

func ToMapWithMerge[T any, K comparable, V any](s Stream[T], mapper func(item T) (K, V), mergeFunc func(existing, new V) V) map[K]V 

@ppd324 ppd324 requested a review from cannian1 April 14, 2025 02:27
@cannian1 cannian1 merged commit c841a5b into duke-git:rc Apr 14, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0